0

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

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

我收到此错误:

架构 x86_64 的未定义符号:

“cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector > const&)”,引用自:

camera.o 中的 CCamera::SaveFrame()

ld:未找到架构 x86_64 的符号

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

如果没有 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)

我不知道该怎么办!

4

1 回答 1

0

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

针对 C++ 11 编译 wxWidgets、Opencv 的小指南:

编译 wxwidgets 3.1.0:我遵循了 OSX 的 install.txt。并在此帮助下调整了 ../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++

然后在这个页面的帮助下,我构建了一个 xcode 项目。调整一些东西:(wxcocoa.xcodeproj 和 minimum.xcodeproj,以及一个全新的项目)

  • 添加到标题搜索路径:($(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 放在“preference->locations->Source Trees 下。不重要,但似乎是更好的位置(重启xcode)
  • 在 wxcocoa.xcconfig 我改变了: MACOSX_DEPLOYMENT_TARGET = 10.10
  • 不知何故,我必须将创建的库的名称从更改libwx_osx_cocoa_static.a为:(lwx_osx_cocoa_static.a 为什么,我不知道)

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

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

    message("使用 libc++ 为 C++11 设置 Xcode。") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x") set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")

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

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

我希望这有帮助。如果您发现更多信息,请告诉我!

于 2016-05-31T06:55:33.267 回答