将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之后,在尝试构build项目时出现以下链接器错误:

未定义的符号为build筑armv7:
“_OBJC_CLASS _ $ _ ALAssetsLibrary”,引用自:
在opencv2中的objc-class-ref(cap_ios_video_camera.o)
“cv :: FeatureDetector :: create(std :: string const&)”,引用自:
ImageAnalyzer.o中的[ImageAnalyzer detectBlobs:]
“cv :: FeatureDetector :: detect(cv :: Mat const&,std :: vector>&,cv :: Mat const&)const”,引用自:
ImageAnalyzer.o中的[ImageAnalyzer detectBlobs:]
ld:符号(s)找不到架构armv7
铿锵声:错误:链接器命令失败,退出代码1(使用-v来查看调用)

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

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

这一切都缩小到这4个链接器错误,我似乎无法摆脱。 我尝试使用libstdc ++。dylib ,但是我得到更多的错误。 我也尝试过自己构buildOpenCV,但是我仍然得到与预构build框架相同的错误。

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

更新:
如此处所见,将“C ++标准库”设置为“libc ++(具有C ++ 11支持的LLVM C ++标准库”)只产生一个错误:

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

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

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

有正确的工具

  1. http://sourceforge.net/projects/opencvlibrary/files/下载opencv-unix并解压到任何地&#x65B9;
  2. http://www.cmake.org/cmake/resources/software.html下载cmake .dmg并安装
  3. 我假设你有OS X狮子的xcode 4.6,其中包括iOS SDK 7.1
  4. 去xcode首选项下载并安装命令行工具,所以你有g ++等

使用cmake来编译opencv

  1. 去提取的opencv文件夹
  2. 创build一个构build目录

     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. 从build文件夹中,转到bin /并运行其中一个testing

     ./opencv_test_stitching 

创build你自己的c ++ opencv xcode项目

  1. 启动xcode并创build一个新的xcode项目
  2. select命令行工具作为os x下的项目types
  3. 打开你的项目的构build设置
  4. 在架构下,将架构设置为64位英特尔。 还将有效体系结构设置为x86_64
  5. 在Build Options下,将Compiler for C / C ++设置为Default Compiler
  6. 在searchpath下,将Header Search Paths设置为/ usr / local / include
  7. 也在searchpath下,将库searchpath设置为/ 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. 转到您所在的“生成设置”选项卡旁边的“构build阶段”选项卡
  2. 在Link Binary With Libraries中,单击+号并selectAdd Other
  3. 点击你的键盘上的前斜线/ / usr / local / lib
  4. 按Enter键并select您想要在您的项目中使用的库
  5. 确保你总是selectlibopencv_core.2.4.4.dylib
  6. 按回车,你会看到你的项目下选定的dylibs

写一些代码

  1. 首先让我们组织文件,右键点击您的项目蓝图图标,然后select新build组
  2. 命名新组opencv或其他
  3. 拖动dylibs并将其放入该组
  4. 打开main.cpp
  5. 从opencv随附的任何示例testing中复制代码并将其粘贴到此处
  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

干杯。

看来你的项目缺less框架AssetsLibrary

  1. select项目导航器中的顶部节点。 (出现包含构build设置的项目和目标页面。)

  2. select目标。

  3. select摘要

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

  5. 点击表格末尾的加号图标,然后selectAssetsLibrary.framework

  6. 点击添加

然后尝试再次构build它。

由于我似乎无法得到有关版本(在这里和OpenCV问答网站)的答案,我打算张贴这个答案,因为它至less解决了这个问题。 这在这里描述。

在您的项目的“ 生成设置”中 ,进入Apple LLVM编译器4.1-语言部分
那里:
C ++语言方言设置为编译器默认值
C ++ Standard Libray设置为libc ++(具有C ++ 11支持的LLVM C ++标准库

做完上述之后,我停止了那些链接器错误,只有一个错误,而只有iOS 5及以上版本被支持。 在项目总结中将部署目标更改为5.0就是个诀窍。

最后一点,我还不确定OpenCV 2.4.3与5之前的iOS版本的兼容性。

铿锵声:错误:-stdlib = libc ++的无效部署目标(需要iOS 5.0或更高版本)才能删除此错误。

转到BuildSettings。 将c ++标准库设置为编译器默认值。 错误将被删除。

只是为了把这个post放在某个地方,以防别人遇到同样的事情。 如果你遵循所有关于设置适当的c + +库链接build设一个iOS应用程序的伟大的意见,但仍然得到未定义的符号的链接错误,请确保您的代码文件设置为编译为c + +! 这是重命名您的.m到.mm和.h到.hpp。 这是小东西…

官方网站的opencv安装指南中没有使用terminal命令,而是使用以下命令从terminal创buildopencv。 为我工作。

光盘OpenCV-2.3.1

mkdir构build

CDbuild立

cmake -G“Unix Makefiles”

使

sudo make install

  1. 去Xcode /常规/链接框架和库
  2. 按“+”button
  3. 键入:AssetsLibrary
  4. select“AssetsLibrary.framework”并导入它

完成

祝你好运!