将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
有正确的工具
- 从http://sourceforge.net/projects/opencvlibrary/files/下载opencv-unix并解压到任何地方
- 从http://www.cmake.org/cmake/resources/software.html下载cmake .dmg并安装
- 我假设你有OS X狮子的xcode 4.6,其中包括iOS SDK 7.1
- 去xcode首选项下载并安装命令行工具,所以你有g ++等
使用cmake来编译opencv
- 去提取的opencv文件夹
-
创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
-
从build文件夹中,转到bin /并运行其中一个testing
./opencv_test_stitching
创build你自己的c ++ opencv xcode项目
- 启动xcode并创build一个新的xcode项目
- select命令行工具作为os x下的项目types
- 打开你的项目的构build设置
- 在架构下,将架构设置为64位英特尔。 还将有效体系结构设置为x86_64
- 在Build Options下,将Compiler for C / C ++设置为Default Compiler
- 在searchpath下,将Header Search Paths设置为/ usr / local / include
- 也在searchpath下,将库searchpath设置为/ usr / local / lib
- 在Apple LLVM编译器4.2下 – 将C ++标准库设置为libstd ++(对于OpenCV 2.4.6,Xcode 5,LLVM 5.0和10.8.5,将语言方言和std库设置为“Compiler Default”而不是“libstd ++”)
将已编译的opencv库添加到您的项目中
- 转到您所在的“生成设置”选项卡旁边的“构build阶段”选项卡
- 在Link Binary With Libraries中,单击+号并selectAdd Other
- 点击你的键盘上的前斜线/ / usr / local / lib
- 按Enter键并select您想要在您的项目中使用的库
- 确保你总是selectlibopencv_core.2.4.4.dylib
- 按回车,你会看到你的项目下选定的dylibs
写一些代码
- 首先让我们组织文件,右键点击您的项目蓝图图标,然后select新build组
- 命名新组opencv或其他
- 拖动dylibs并将其放入该组
- 打开main.cpp
- 从opencv随附的任何示例testing中复制代码并将其粘贴到此处
- 确保添加了所有必需的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 。
-
select项目导航器中的顶部节点。 (出现包含构build设置的项目和目标页面。)
-
select目标。
-
select摘要 。
-
向下滚动到链接的框架和库 。
-
点击表格末尾的加号图标,然后selectAssetsLibrary.framework 。
-
点击添加 。
然后尝试再次构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
- 去Xcode /常规/链接框架和库
- 按“+”button
- 键入:AssetsLibrary
- select“AssetsLibrary.framework”并导入它
完成
祝你好运!