opencv 3.1 wxwidgets cv::imwrite 错误

opencv 3.1 wxwidgets cv::imwrite error

我正在使用 Opencv 3.1 和 wxwidgets 3.1 构建一个项目。我使用的代码: [wxOpenCv 演示1]

我尝试使用函数 cv::imwrite() 添加一个写入框架对象。 (我将 c 调用更改为 c++,例如:cvQueryFrame( m_pCapture ) 到 m_pCapture >> m_CurFrame;)

我收到这个错误:

Undefined symbols for architecture x86_64:

"cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector > const&)", referenced from:

CCamera::SaveFrame() in camera.o

ld: symbol(s) not found for architecture x86_64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

没有 wxwidgets,opencv 函数可以正常工作。看来跟wxwidgets和opencv的组合有关。

这适用于 wxwidgets 和 Opencv:

cv::imshow("tmp",m_CurFrame);
cv::waitKey(4);
//      cv::imwrite(Tmp , m_CurFrame);

如果我取消注释最后一行,我会得到错误。

OS X: 10 Yosemite 我使用默认编译器 (Apple LLVM 7.0)

我不知道该怎么办!

通过重新编译 wxwidgets 3.1.0 和 Opencv 3.1 解决了这个问题(以及更多)。我使用这些链接来实现它。

针对C++11编译wxWidgets、Opencv的小攻略:

编译wxwidgets 3.1.0:我按照install.txt for OSX。并在 this

的帮助下调整了 ../configure 调用

我添加了:--enable-debug 并更改了 macosx 版本

../configure --disable-shared --enable-debug --enable-unicode --with-cocoa --with-macosx-version-min=10.7 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk CXXFLAGS="-std=c++0x -stdlib=libc++" CPPFLAGS="-stdlib=libc++" LIBS=-lc++

然后在 this page 的帮助下,我构建了一个 xcode 项目。调整几件事: (wxcocoa.xcodeproj 和 minimal.xcodeproj,以及一个全新的项目)

  • 添加到Header搜索路径:$(WXROOT)/build/osx(查找wx.xcconfig)
  • 基本 SDK:最新 OS X (10.11)
  • C语言方言:GNU 11(不知道对不对)
  • C++ 语言方言:GNU++11 [-std=gnu++11]
  • C++ 标准库:libc++ (LLVM C++ standard library with C++ 11 support)
  • 将 WXROOT 置于“首选项->位置->源代码树”下。不重要,但似乎是一个更好的位置(重启xcode)
  • 在wxcocoa.xcconfig我改变了:MACOSX_DEPLOYMENT_TARGET = 10.10
  • 不知何故,我必须将创建的库的名称从 libwx_osx_cocoa_static.a 更改为:lwx_osx_cocoa_static.a(为什么,我不知道)

我使用 GNU++ 11,因此 libc++ 能够使用像“future”这样的新功能 然后我将 OpenCV 添加到我新创建的 wxXcode 项目中:

  • 按照以下步骤编译 OpenCV:(在网上搜索:howto-install-build-and-use-opencv-macosx-10-10)
  • 确保 SDK 是正确的版本(这是我最大的问题),匹配 wxWidgets 的构建
  • 编译器设置与 wxWidgets 相同(见上文) (添加:)为此,我向(Opencv-master 文件夹中的 CMakeLists.txt 添加了一些行。行下方:# OpenCV compiler and linker options (我在这里发现了这个技巧:在网上搜索:OpenCV with C++11 on OS X 10.8

    消息("Setting up Xcode for C++11 with libc++.") 设置(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x") 设置(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

  • 然后按照这个页面更新新建的wxWidgets xcode工程(网上搜索:howto-setup-xcode-6-1-to-work-with-opencv-libraries)

这应该可以解决问题!我现在可以结合 wxWidgets、OpenCV 和 libc++ (多线程,“未来”)

希望对您有所帮助。 如果您发现更多,请告诉我!