【发布时间】:2016-01-14 10:42:07
【问题描述】:
我之前按照this guide成功编译过OpenCV 3.0,主要包括以下步骤:
- 下载所有先决条件(XCode、命令行工具、CMake 和 OpenCV 源代码)
- 通过配置 CMake(通过 gui)构建静态库:
- 取消选中BUILD_SHARED_LIBS
- 取消选中 BUILD_TESTS
- 为 CMAKE_OSX_SYSROOT 添加一个 SDK 路径(如果重要,我使用了
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk)。 - 将 x86_64 添加到 CMAKE_OSX_ARCHITECTURES(强调我的,这似乎是问题所在,我确定我已按照此步骤操作)
- 取消选中 WITH_1394
- 取消选中 WITH_FFMPEG
- 通过 CMake 配置和生成,然后通过 CLI 配置和生成
make和sudo make install。
以上所有都可以正常工作。
我现在正在寻找使用 the extra modules 编译 OpenCV。根据他们的自述,它应该就像在 CMake 中填写 OPENCV_EXTRA_MODULES_PATH 到 <opencv_contrib>/modules 一样简单,然后像往常一样构建。
我按照上面概述的步骤添加了参数并成功构建 OpenCV,但是,当尝试在程序中使用额外模块之一时(即cv::ximgproc::createStructuredEdgeDetection,如果重要的话),我收到以下错误编译时:
架构 x86_64 的未定义符号:
"cv::ximgproc::createStructuredEdgeDetection(cv::String const&, cv::Ptr<cv::ximgproc::RFFeatureGetter const>)",引用自:
_main 在 main.o
ld:未找到体系结构 x86_64 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
我已经包含了应该包含上述内容的标题:
#include <opencv2/ximgproc.hpp>
我正在通过 XCode 进行编译,我在其中为项目设置了额外的标头搜索路径 /usr/local/include 和库搜索路径 /usr/local/lib,我在这里遗漏了什么吗?
标准的 OpenCV 功能可以正常工作。
可能是什么问题,我将如何解决?
【问题讨论】:
-
您是否已将 contrib 库添加到您的依赖项中?其余的似乎正确
-
@Miki 非常感谢您的评论,我错过了。我最初有其他链接器标志
-lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab,但我没有包括-lopencv_ximgproc。编译成功并添加了后者。有没有一种简单的方法可以找出所有提供的包含? -
您应该在您的
<OPENCV_DIR>/install/文件夹下找到所有库。<OPENCV_DIR>/install/x86/vc12/staticlib在我的构建中 -
@Miki 你帮了我很大的忙,我已经尝试解决这个问题已经有一段时间了,谢谢。如果你想写一个简短的答案,我很乐意接受。
-
完成,很高兴它有帮助!
标签: c++ xcode macos opencv opencv3.0