Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用Mingw创建OpenCV 3.1的共享版本时,未定义对cv::redirectError的引用_Windows_Opencv_Installation_Opencv3.0_Mingw32 - Fatal编程技术网

Windows 使用Mingw创建OpenCV 3.1的共享版本时,未定义对cv::redirectError的引用

Windows 使用Mingw创建OpenCV 3.1的共享版本时,未定义对cv::redirectError的引用,windows,opencv,installation,opencv3.0,mingw32,Windows,Opencv,Installation,Opencv3.0,Mingw32,程序和版本:Windows 10、Mingw32和gcc 6.1.0、Cmake 3.6.1(代码::blocks 16.01) 首先,我应该提到构建一个静态构建确实非常有效,只是构建一个共享构建不起作用,我也没有找到解决我的具体问题的方法 我尝试将上述程序作为共享构建来构建OpenCV3.1。使用cmake的默认设置,我得到以下错误: [ 34%] Linking CXX executable ..\..\bin\opencv_test_core.exe ../../lib/libopencv

程序和版本:Windows 10、Mingw32和gcc 6.1.0、Cmake 3.6.1(代码::blocks 16.01)

首先,我应该提到构建一个静态构建确实非常有效,只是构建一个共享构建不起作用,我也没有找到解决我的具体问题的方法

我尝试将上述程序作为共享构建来构建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=off、BUILD_WITH_DYNAMIC_IPP=off、BUILD_opencv_world=off、ENALBE_ommit_FRAME_POINTER=on、ENABLE_SSE/SSE2/SSE3=on、WITH_IPP和WITH_IPP_A=off(因为在某些情况下激活时,这似乎会导致常见问题)

现在的问题是:这个错误意味着什么?如何修复它?

显然缺少某些函数:
未定义对`cv::redirectError(int(*)(int,char const*,char const*,char const*,int,void*),void*,void**)的引用。
。搜索源代码可以在中给出此函数的一些定义

  • system.cpp
    :第662行:
    重定向错误(CvErrorCallback errCallback,void*userdata,void**prevUserdata)
  • utility.hpp
    :第174行:
    CV\u导出ErrorCallback重定向错误(ErrorCallback errCallback,void*userdata=0,void**prevUserdata=0)
  • 但是未定义的引用需要一些int-an-char指针作为参数,但是我在任何源文件中都找不到这样的函数

    当停用BUILD_EXAMPLES/PERF_TESTS/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
    

    我没有找到任何关于此错误的错误报告或其他内容。

    遇到了相同的问题。我在ts.cpp中将
    cv::redirectError
    替换为
    cvRedirectError
    解决了这个问题,就像以前一样

    我所做的是修改
    redirectError()
    core/src/system.cpp中的实现签名,对参数和返回值类型使用
    ErrorCallback
    而不是
    CvErrorCallback
    ,以匹配其声明签名。不知道为什么这很重要,因为两个typedef看起来完全相同;尽管如此,它还是起到了作用。

    我还不得不以同样的方式(两次)更改
    calibinit.cpp
    ,但编译后没有出现错误。非常感谢。