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++
(多线程,“未来”)
希望对您有所帮助。
如果您发现更多,请告诉我!
我正在使用 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++ (多线程,“未来”)
希望对您有所帮助。 如果您发现更多,请告诉我!