5

我的项目一直运行良好,直到今天早上。我使用的是 xcode 4.3 和旧版本的 OpenCV(我不确定确切的版本)。OSX 已经是 10.7.x,但不是 10.7.5

今天,在将 OSX 升级到 10.7.5、xcode 到 4.5.2 并下载 OpenCV 2.4.3 后,我在尝试构建项目时收到以下链接器错误:

架构 armv7 的未定义符号:
“_OBJC_CLASS_$_ALAssetsLibrary”,引用自:
opencv2 中的 objc-class-ref(cap_ios_video_camera.o)
“cv::FeatureDetector::create(std::string const&)”,引用自:
-[ImageAnalyzer ImageAnalyzer.o 中的detectBlobs:]
"cv::FeatureDetector::detect(cv::Mat const&, std::vector >&, cv::Mat const&) const",引用自: ImageAnalyzer 中的
-[ImageAnalyzer detectBlobs:]。 o
ld:未找到架构 armv7 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

为了使用新的 opencv 框架,我删除了对旧框架的引用,并将项目引用到从这里下载的官方 prebuilt opencv2.framework 。
我还删除了对libz.dylib的引用,并添加了对libc++.dylib的引用。
最后一步是将前缀文件更新为新框架。前缀文件中的相关部分现在如下所示:

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

这一切都缩小到我似乎无法摆脱的这 4 个链接器错误。我尝试使用libstdc++.dylib,但我遇到了更多错误。我也尝试按照此处的说明自行构建 OpenCV ,但我仍然遇到与预构建框架相同的错误。

我错过了什么?我的项目还有什么需要改变的吗?


更新:如此
所示,将“C++ 标准库”设置为“libc++(支持 C++ 11 的 LLVM C++ 标准库”仅产生一个错误:

clang:错误:-stdlib=libc++ 的部署目标无效(需要 iOS 5.0 或更高版本)

将部署目标更改为 iOS 5 终于让我的项目再次运行。
这是否意味着 OpenCV 2.4.3 不适用于 5 之前的 iOS 版本?

4

7 回答 7

6

使用 cmake 2.8.10 和 xcode 4.6.1 在 mac os x lion 10.7.5 上编译和运行 c++ opencv 2.4.4 的步骤

拥有合适的工具

  1. 从http://sourceforge.net/projects/opencvlibrary/files/下载 opencv-unix并在任何地方解压
  2. 从http://www.cmake.org/cmake/resources/software.html下载 cmake .dmg并安装
  3. 我假设您在 os x lion 上安装了 xcode 4.6,其中包括 ios sdk 6.1
  4. 转到 xcode 首选项以下载并安装命令行工具,以便您拥有 g++ 等。

使用cmake编译opencv

  1. 转到提取的opencv文件夹
  2. 创建构建目录

    mkdir build
    cd build
    cmake -D WITH_TBB=OFF -D BUILD_NEW_PYTHON_SUPPORT=OFF -D BUILD_FAT_JAVA_LIB=OFF -D BUILD_TBB=OFF -D BUILD_EXAMPLES=ON -D CMAKE_CXX_COMPILER=g++ CMAKE_CC_COMPILER=gcc -D CMAKE_OSX_ARCHITECTURES=x86_64 -D BUILD_opencv_java=OFF -G "Unix Makefiles" ..
    make -j8
    sudo make install
    
  3. 从构建文件夹中,转到 bin/ 并运行其中一项测试

    ./opencv_test_stitching
    

创建自己的 c++ opencv xcode 项目

  1. 启动 xcode 并创建一个新的 xcode 项目
  2. os x下项目类型选择Command Line Tool
  3. 打开项目的构建设置
  4. 在架构下,将架构设置为 64 位英特尔。还将有效架构设置为 x86_64
  5. 在 Build Options 下,将 Compiler for C/C++ 设置为 Default Compiler
  6. 在 Search Paths 下,将 Header Search Paths 设置为 /usr/local/include
  7. 同样在搜索路径下,将库搜索路径设置为 /usr/local/lib
  8. 在 Apple LLVM 编译器 4.2 - Language set C++ Standard Library to libstd++(对于 OpenCV 2.4.6、Xcode 5、LLVM 5.0 和 10.8.5,将语言方言和 std 库设置为“编译器默认值”而不是“libstd++”)

将编译好的 opencv 库添加到你的项目中

  1. 转到您所在的“构建设置”选项卡旁边的“构建阶段”选项卡
  2. 在 Link Binary With Libraries 中,单击 + 号并选择 Add Other
  3. 点击键盘上的前斜杠 / 并输入 /usr/local/lib
  4. 点击回车并选择要在项目中使用的库
  5. 确保您始终选择 libopencv_core.2.4.4.dylib
  6. 点击回车,您将在项目下看到选定的 dylib

写一些代码

  1. 首先让我们组织文件,右键单击您的项目蓝图图标并选择新建组
  2. 将新组命名为 opencv 或其他
  3. 将 dylib 拖放到该组中
  4. 打开 main.cpp
  5. 从 opencv 附带的任何示例测试中复制代码并将其粘贴到此处
  6. 确保添加了所有必需的dylib,例如,如果将opencv_test_stitching.cpp 代码复制到main.cpp 中,则需要在前面的步骤libopencv_core.2.4.4.dylib libopencv_highgui.2.4.4 中添加以下库。 dylib libopencv_stitching.2.4.4.dylib

干杯。

于 2013-03-27T15:37:57.757 回答
4

您的项目似乎缺少框架AssetsLibrary

  1. 在项目导航器中选择顶部节点。(出现构建设置的项目和目标页面。)

  2. 选择目标。

  3. 选择摘要

  4. 向下滚动到Linked Frameworks and Libraries

  5. 单击表末尾的加号图标并选择AssetsLibrary.framework

  6. 单击添加

然后尝试再次构建它。

于 2012-12-25T12:41:14.930 回答
4

由于我似乎无法获得有关版本的答案(无论是在此处还是在 OpenCV Q&A 网站上),我将把它作为答案发布,因为它至少解决了这个问题。这在此处进行了描述。

在项目的Build Settings中,转到Apple LLVM compiler 4.1-Language部分。
那里:
Set C++ Language Dialect to Compiler Default
Set C++ Standard Libray to libc++ (LLVM C++ standard libray with C++ 11 support

完成上述操作后,我不再收到那些链接器错误,而是只收到一个错误,它表明只有 iOS 5 和以上是支持的。更改部署目标到项目summery中的5.0就可以了。

最后一点,关于 OpenCV 2.4.3 与低于 5 的 iOS 版本的兼容性,我仍然不确定这意味着什么。

于 2012-12-27T11:39:21.047 回答
1

clang: error: invalid deployment target for -stdlib=libc++(需要 iOS 5.0 或更高版本)来消除此错误。

转到构建设置。将 c++ 标准库设置为编译器默认值。该错误肯定会被删除。

于 2013-03-25T10:36:37.527 回答
1

只是为了把这个放到某个地方的帖子中,以防其他人遇到同样的事情。如果您遵循有关设置正确的 c++ 库以链接构建 iOS 应用程序的所有重要建议,但仍然会出现未定义符号的链接错误,请确保您的代码文件设置为编译为 c++!那就是将您的 .m 重命名为 .mm 并将 .h 重命名为 .hpp。都是些小事...

于 2013-05-11T19:33:50.120 回答
0

不要使用官网 opencv 安装指南中给出的终端命令,而是使用以下命令从终端构建 opencv。为我工作。

cd OpenCV-2.3.1

mkdir 构建

光盘构建

cmake -G "Unix Makefiles" ..

制作

须藤使安装

于 2014-01-13T07:18:57.203 回答
0
  1. Go Xcode/通用/链接框架和库
  2. 按“+”按钮
  3. 类型:资产库
  4. 选择“AssetsLibrary.framework”并导入

完毕

祝你好运!

于 2017-06-07T09:33:49.387 回答