我的项目工作正常,直到今天早上。我使用的是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.o中的[ImageAnalyzer detectBlobs:] " cv :: FeatureDetector :: detect(cv :: Mat const&,std :: vector>&,cv :: Mat const&)const",引自:
- ImageAnalyzer.o中的[ImageAnalyzer detectBlobs:] ld:未找到架构armv7的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
为了使用新的opencv框架,我删除了对旧框架的引用,并将项目引用到从here下载的官方预构建opencv2.framework。
我还删除了对 libz.dylib 的引用,并添加了对 libc ++。dylib 的引用。
最后一步是将前缀文件更新为新框架。前缀文件中的相关部分现在如下所示:
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
这一切都缩小到我无法摆脱的4个链接器错误。我尝试使用 libstdc ++。dylib ,但我得到了更多的错误。我也尝试按照here的说明自己构建OpenCV,但我仍然遇到与预构建框架相同的错误。
我错过了什么?我的项目还需要改变什么吗?
更新:
如here所示,设置&#34; C ++标准库&#34; to&#34; libc ++(LLVM C ++标准库,支持C ++ 11&#34;只产生一个错误:
clang:错误:-stdlib = libc ++的无效部署目标(需要iOS 5.0或更高版本)
将部署目标更改为iOS 5终于让我的项目再次运行 这是否意味着OpenCV 2.4.3不适用于早于5的iOS版本?
答案 0 :(得分:6)
使用cmake 2.8.10和xcode 4.6.1在mac os x lion 10.7.5上编译和运行c ++ opencv 2.4.4的步骤
拥有合适的工具
使用cmake编译opencv
创建构建目录
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
转到bin /并运行其中一个测试
./opencv_test_stitching
创建自己的c ++ opencv xcode项目
将已编译的opencv库添加到项目中
写一些代码
干杯。
答案 1 :(得分:4)
您的项目似乎缺少框架 AssetsLibrary 。
在项目导航器中选择顶部节点。 (将显示包含构建设置的项目和目标页面。)
选择目标。
选择摘要。
向下滚动到链接的框架和库。
点击表格末尾的 Plus 图标,然后选择 AssetsLibrary.framework 。
点击添加。
然后尝试再次构建它。
答案 2 :(得分:4)
由于我似乎无法得到有关版本的答案(无论是在这里还是在OpenCV Q&amp; A网站上),我都会将此作为答案发布,因为它至少解决了这个问题。这被描述为here
在项目的构建设置中,请转到 Apple LLVM编译器4.1-语言部分。
有:
将 C ++语言方言设置为编译器默认
将 C ++标准库设置为 libc ++(带有C ++ 11支持的LLVM C ++标准库
完成上述操作后,我停止了获取这些链接器错误,而只收到一个错误,表示只支持iOS 5及更高版本。在项目总结中将部署目标更改为5.0可以解决问题
最后,我还不确定OpenCV 2.4.3与5岁以上iOS版本兼容的含义。
答案 3 :(得分:1)
clang:错误:-stdlib = libc ++(需要iOS 5.0或更高版本)的无效部署目标才能删除此错误。
GoTo BuildSettings。将c ++标准库设置为编译器默认值。该 错误肯定会被删除。
答案 4 :(得分:1)
只是为了让其他人遇到同样的事情而将其发布到某个地方。如果您遵循所有关于设置正确的c ++库以建立iOS应用程序的好建议,但仍然会得到未定义符号的链接错误,请确保您的代码文件设置为编译为c ++!这是将你的.m重命名为.mm和.h为.hpp。这是小事......
答案 5 :(得分:0)
使用以下命令从终端构建opencv,而不是使用官方网站的opencv安装指南中给出的终端命令。为我工作。
cd OpenCV-2.3.1
mkdir build
cd build
cmake -G&#34; Unix Makefiles&#34; ..
请
sudo make install
答案 6 :(得分:0)
完成强>
祝你好运!