将Xcode升级到4.5.2并将OpenCV升级到2.4.3后出现链接器错误

Dar*_*per 5 xcode opencv linker-errors ios

我的项目工作得很好,直到今天早上.我使用的是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框架,我删除了对旧框架的引用,并将项目引用到从此处下载的官方预构建的opencv2.framework .
我还删除了对libz.dylib的引用,并添加了对libc ++.dylib的引用.
最后一步是将前缀文件更新为新框架.前缀文件中的相关部分现在如下所示:

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
Run Code Online (Sandbox Code Playgroud)

这一切都缩小到这4个链接器错误我似乎无法摆脱.我尝试使用libstdc ++.dylib,但我得到了更多的错误.我也试图建立自己的OpenCV作为解释在这里,但我仍然得到同样的错误,预建框架.

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


更新:
正如所看到这里,设置"C++标准库"到"的libc ++(LLVM C++标准和C++ 11的支持libray"只产生一个错误:

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

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

小智 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 从build文件夹中,转到bin /并运行其中一个测试

    ./opencv_test_stitching
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. 启动xcode并创建一个新的xcode项目
  2. 为os x下的项目类型选择命令行工具
  3. 打开项目的构建设置
  4. 在架构下,将架构设置为64位英特尔.还将Valid Architectures设置为x86_64
  5. 在Build Options下,将Compiler for C/C++设置为Default Compiler
  6. 在"搜索路径"下,将"标题搜索路径"设置为/ usr/local/include
  7. 也在"搜索路径"下,将"库搜索路径"设置为/ usr/local/lib
  8. 在Apple LLVM编译器4.2下 - 语言集C++标准库到libstd ++(对于OpenCV 2.4.6,Xcode 5,LLVM 5.0和10.8.5,将语言方言和标准库设置为"编译器默认值"而不是"libstd ++")

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

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

干杯.


Dar*_*per 4

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

在项目的Build Settings中,转到Apple LLVM compiler 4.1-Language部分。
那里:
C++ 语言方言设置为编译器默认值将C++ 标准库
设置为libc++(支持 C++ 11 的 LLVM C++ 标准库) 执行上述操作后,我不再收到这些链接器错误,而只收到一个错误,该错误指出只有 iOS 5 和以上是支持的。在项目 Summery 中将部署目标更改为 5.0 就可以了。 最后一点,我仍然不确定这意味着什么,关于 OpenCV 2.4.3 与 5 之前的 iOS 版本的兼容性。