Xcode升级到4.5.2,OpenCV升级到2.4.3后链接器错误



我的项目直到今天早上都很顺利。我使用的是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_$ _alassetlibrary ",引用自:
Objc-class-ref in opencv2(cap_ios_video_camera.o)
"cv::FeatureDetector::create(std::string const&)",引用自:
—在ImageAnalyzer中[ImageAnalyzer detectBlobs:]o
"cv::FeatureDetector::detect(cv::Mat const&, std::vector>&, cv::Mat const&) const",引用自:
—在ImageAnalyzer中[ImageAnalyzer detectBlobs:]o
没有找到armv7架构的符号
Clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

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

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

这一切都缩小到这4个链接错误,我似乎无法摆脱。我尝试使用libstdc++。dylib,但我得到更多的错误。我也试着自己构建OpenCV,正如这里所解释的,但我仍然得到与预构建框架相同的错误。

我错过了什么?我的项目中还有什么需要修改的地方吗?


更新:
如图所示,将" c++标准库"设置为"libc++ (LLVM c++ Standard Library with c++ 11 support"只会产生一个错误:

clang: error: invalid deployment target for -stdlib=libc++(需要iOS 5.0或更高版本)

将部署目标更改为iOS 5最终使我的项目再次运行。
这是否意味着OpenCV 2.4.3不能在ios5之前的版本上工作?

在MAC OS x lion 10.7.5和cmake 2.8.10和xcode 4.6.1上编译和运行c++ opencv 2.4.4的步骤

拥有合适的工具

  1. 从http://sourceforge.net/projects/opencvlibrary/files/下载openv -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下的项目类型
  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,将语言方言和std库设置为"compiler Default"而不是"libstd++")

将编译后的opencv库添加到您的项目

  1. 转到
  2. 构建设置选项卡旁边的构建阶段选项卡
  3. 内部链接二进制库,点击+号,选择添加其他
  4. 按键盘上的前斜杠,然后输入/usr/local/lib
  5. 按enter键,选择你想在项目中使用的库
  6. 确保始终选择libopencv_core.2.4.4.dylib
  7. 按enter键,你会看到在你的项目
  8. 下选中的dylib。

写一些代码

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

欢呼。

看来你的项目缺少框架AssetsLibrary

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

  2. 选择目标

  3. 选择摘要。

  4. 向下滚动到链接框架和库

  5. 单击表格末尾的Plus图标并选择AssetsLibrary.framework

  6. 点击添加

然后尝试重新构建它。

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

在项目的Build Settings中,进入Apple LLVM compiler 4.1-Language部分。
:
设置 c++语言方言编译器默认值
设置 c++标准库libc++ (LLVM c++标准库,支持c++ 11)

在完成上述操作后,我不再得到那些链接器错误,而只得到一个错误,即只支持iOS 5及以上版本。在项目总结中将部署目标更改为5.0就达到了目的。

最后要说明的是,我仍然不确定这意味着什么,关于OpenCV 2.4.3与ios5以上版本的兼容性。

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

GoTo BuildSettings。将c++标准库设置为编译器默认值。的错误一定会被删除。

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

不使用官方网站opencv安装指南中给出的终端命令,而是使用以下命令从终端构建opencv。

cd OpenCV-2.3.1

mkdir构建

cd构建

cmake -G "Unix Makefiles" .

使

sudo make install

    打开Xcode/General/Linked Frameworks and Libraries目录
  1. 按"+"键
  2. 类型:AssetsLibrary
  3. 选择"AssetsLibrary.framework"并导入

祝你好运!

相关内容

  • 没有找到相关文章

最新更新