compiler error including opencv (or just cmath)

Steps causing the bug to occur

Hi,

I’m trying to create a node in C porting bgslibrary. I meet a compiler error that i can’t sort out. I tried to simplify to isolate the issue, here is the simplest way to meet it:

  1. rename example.stateless.vuoize.c to example.stateless.vuoize.cc

  2. edit example.stateless.vuoize.cc adding after #include “node.h” the following lines:

#include <iostream>

#include <algorithm>
#include <iterator>
#include <string>
#include <vector>

#include <opencv2/opencv.hpp>
  1. type
vuo-compile -I /usr/local/opt/opencv@2/include  example.stateless.vuoize.cc
  1. I get:
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:313:9: error: no member named 'signbit' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:314:9: error: no member named 'fpclassify' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:315:9: error: no member named 'isfinite' in the global namespace; did you mean 'finite'?
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:316:9: error: no member named 'isinf' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:317:9: error: no member named 'isnan' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:318:9: error: no member named 'isnormal' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:319:7: error: no member named 'isgreater' in the global namespace; did you mean '::std::greater'?
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:320:7: error: no member named 'isgreaterequal' in the global namespace; did you mean '::std::greater_equal'?
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:321:9: error: no member named 'isless' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:322:9: error: no member named 'islessequal' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:323:9: error: no member named 'islessgreater' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:324:9: error: no member named 'isunordered' in the global namespace
/Library/Developer/Vuo/framework/Vuo.framework/Frameworks/llvm.framework/Versions/A/Headers/lib/c++/v1/cmath:325:9: error: no member named 'isunordered' in the global namespace

Seems the first libraries are included correctly, not opencv one. I tried with several opencv versions installed using brew, v2 the simplest, but with no luck.
Thanks for your support.

example.stateless.vuoize.cc.zip (1.2 KB)

example.stateless.vuoize.cc.zip (1.2 KB)

1 Like

@cremaschi, I’ve converted this to a bug report. We’re able to reproduce the problem by just doing #include <cmath> directly.

The problem has to do with header search paths. The Vuo compiler is finding the wrong version of the header file that defines signbit and other functions.

We can fix this in the Vuo compiler by changing the order of its built-in header search paths. Unfortunately we don’t know of a workaround in the meantime that would make it possible to include cmath, or to include anything that includes cmath, such as OpenCV.

Fixed in Vuo 2.4.0.

1 Like