程序和版本创建的OpenCV 3.1的共享版本:视窗10,MINGW32用gcc 6.1.0,3.6.1的CMake,(代码::块16.01)未定义参考CV :: redirectError而使用MinGW
首先,我应该提到构建静态构建确实可行,只是构建共享构建不起作用,并且我没有找到针对特定问题的解决方法。
我试图用上述程序构建OpenCV3.1作为共享构建。使用cmake的默认设置,我得到以下错误:
[ 34%] Linking CXX executable ..\..\bin\opencv_test_core.exe
../../lib/libopencv_ts310.a(ts.cpp.obj):ts.cpp:(.text$_ZN6cvtest2TS4initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x119): undefined reference to `cv::redirectError(int (*)(int, char const*, char const*, char const*, int, void*), void*, void**)'
collect2.exe: error: ld returned 1 exit status
modules\core\CMakeFiles\opencv_test_core.dir\build.make:885: recipe for target 'bin/opencv_test_core.exe' failed
mingw32-make[2]: *** [bin/opencv_test_core.exe] Error 1
CMakeFiles\Makefile2:1713: recipe for target 'modules/core/CMakeFiles/opencv_test_core.dir/all' failed
mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_test_core.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
在我的情况默认设置是指(其中包括):BUILD_TBB =关闭,BUILD_WITH_DYNAMIC_IPP =关,BUILD_opencv_world =关,ENALBE_OMIT_FRAME_POINTER =上,ENABLE_SSE/SSE2/SSE3 =在WITH_IPP和WITH_IPP_A = off(因为这在激活时在某些情况下似乎会导致一个常见问题)。
现在的问题是:这个错误是什么意思,以及如何解决它?
显然有些功能丢失:undefined reference to `cv::redirectError(int (*)(int, char const*, char const*, char const*, int, void*), void*, void**)
。搜索源代码给这个函数的一些定义在
system.cpp
:行662:redirectError(CvErrorCallback errCallback, void* userdata, void** prevUserdata)
utility.hpp
:行174:CV_EXPORTS ErrorCallback redirectError(ErrorCallback errCallback, void* userdata=0, void** prevUserdata=0);
但未定义的参考想要一些诠释一个字符指针作为参数,但我没有在任何源文件中找到这样的功能。
当停用BUILD_EXAMPLES/PERF_TESTS /测试(如建议在其他地方),这并不解决问题,但给以后同样的问题:
[ 95%] Linking CXX shared library ..\..\bin\libopencv_calib3d310.dll
CMakeFiles\opencv_calib3d.dir/objects.a(calibinit.cpp.obj):calibinit.cpp:(.text$_ZN2cv15findCirclesGridERKNS_11_InputArrayENS_5Size_IiEERKNS_12_OutputArrayEiRKNS_3PtrINS_9Feature2DEEE+0x426): undefined reference to `cv::redirectError(int (*)(int, char const*, char const*, char const*, int, void*), void*, void**)'
CMakeFiles\opencv_calib3d.dir/objects.a(calibinit.cpp.obj):calibinit.cpp:(.text$_ZN2cv15findCirclesGridERKNS_11_InputArrayENS_5Size_IiEERKNS_12_OutputArrayEiRKNS_3PtrINS_9Feature2DEEE+0x44d): undefined reference to `cv::redirectError(int (*)(int, char const*, char const*, char const*, int, void*), void*, void**)'
collect2.exe: error: ld returned 1 exit status
modules\calib3d\CMakeFiles\opencv_calib3d.dir\build.make:787: recipe for target 'bin/libopencv_calib3d310.dll' failed
mingw32-make[2]: *** [bin/libopencv_calib3d310.dll] Error 1
CMakeFiles\Makefile2:3634: recipe for target 'modules/calib3d/CMakeFiles/opencv_calib3d.dir/all' failed
mingw32-make[1]: *** [modules/calib3d/CMakeFiles/opencv_calib3d.dir/all] Error 2
Makefile:159: recipe for target 'all' failed
mingw32-make: *** [all] Error 2
我没有带发现的缺陷报告或别的东西关于这个错误。
我还必须以相同的方式(两次)更改''calibinit.cpp'',但随后编译没有错误。谢谢! – Phann