我的项目工作得很好,直到今天早上 . 我使用的是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 detectBlobs:]“cv :: FeatureDetector :: detect(cv :: Mat const&,std :: vector>&,cv :: Mat const&)const”,引自: - ImageAnalyzer中的[ImageAnalyzer detectBlobs:] .o ld:找不到架构armv7 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
为了使用新的opencv框架,我删除了对旧框架的引用,并将项目引用到从here下载的官方预构建的opencv2.framework .
我还删除了对 libz.dylib 的引用,并添加了对 libc++.dylib 的引用 .
最后一步是将前缀文件更新为新框架 . 前缀文件中的相关部分现在如下所示:
#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif
这一切都缩小到这4个链接器错误我似乎无法摆脱 . 我尝试使用 libstdc++.dylib ,但是我遇到了更多的错误 . 我也尝试过自己构建OpenCV,如解释here,但我仍然遇到与预构建框架相同的错误 .
我错过了什么?我的项目还需要改变什么吗?
更新:
如here所示,将"C++ Standard Library"设置为"libc++ (LLVM C++ standard libray with C++ 11 support"只产生一个错误:
clang:错误:-stdlib = libc的无效部署目标(需要iOS 5.0或更高版本)
将部署目标更改为iOS 5终于让我的项目再次运行 .
这是否意味着OpenCV 2.4.3不适用于5岁以上的iOS版本?
7 回答
不使用官方网站的opencv安装指南中给出的终端命令,而是使用以下命令从终端构建opencv . 为我工作 .
cd OpenCV-2.3.1
mkdir build
cd build
cmake -G“Unix Makefiles”..
使
sudo make install
Go Xcode / General / Linked Frameworks and Libraries
按"+"按钮
类型:AssetsLibrary
选择"AssetsLibrary.framework"并导入它
Done
Good luck!
使用cmake 2.8.10和xcode 4.6.1在mac os x lion 10.7.5上编译和运行c opencv 2.4.4的步骤
Having the right tools
从http://sourceforge.net/projects/opencvlibrary/files/下载opencv-unix并在任何地方解压缩
从http://www.cmake.org/cmake/resources/software.html下载cmake .dmg并安装它
我假设你在os x lion上有xcode 4.6,其中包括ios sdk 6.1
转到xcode首选项下载并安装命令行工具,以便你有g等 .
Use cmake to compile opencv
转到解压缩的opencv文件夹
创建一个构建目录
从构建文件夹
Create your own c++ opencv xcode project
启动xcode并创建一个新的xcode项目
为os x下的项目类型选择命令行工具
打开项目的构建设置
在架构下
,将架构设置为64位英特尔 . 还将Valid Architectures设置为x86_64
在构建选项下
,将Ciler的编译器设置为默认编译器
在搜索路径下,将 Headers 搜索路径设置为/ usr / local / include
也在搜索路径下,将库搜索路径设置为/ 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++")
Add the compiled opencv libraries to your project
转到您所在的Build Settings选项卡旁边的Build Phases选项卡
在Link Binary With Libraries中,单击符号并选择Add Other
点击键盘上的前斜杠/并输入/ usr / local / lib
点击进入并选择要在项目中使用的库
确保始终选择libopencv_core.2.4.4.dylib
点击进入,您将在项目下看到所选的dylib
write some code
首先让我们整理文件,右键单击项目蓝图图标,然后选择新建组
将新组命名为opencv或其他
拖动dylib并将其放入该组中
打开main.cpp
从opencv随附的任何样本测试中复制代码并将其粘贴到此处
确保添加了所有必需的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
干杯 .
您的项目似乎缺少框架AssetsLibrary .
在项目导航器中选择顶部节点 . (将显示包含构建设置的项目和目标页面 . )
选择目标 .
选择摘要 .
向下滚动到Linked Frameworks and Libraries .
单击表末尾的加号图标,然后选择AssetsLibrary.framework .
单击“添加” .
然后尝试再次构建它 .
因为我可以将这个作为答案发布,因为它至少解决了这个问题 . 这被描述为here .
在项目的 Build Settings 中,转到 Apple LLVM compiler 4.1-Language 部分 .
那里:
将 C++ Language Dialect 设为 Compiler Default
将 C++ Standard Libray 设为 libc++ (LLVM C++ standard libray with C++ 11 support
完成上述操作后,我停止了获取这些链接器错误,而只收到一个错误,表示只支持iOS 5及更高版本 . 在项目总结中将 Deployment Target 更改为5.0就可以了 .
最后,我与早于5的iOS版本兼容 .
clang:错误:-stdlib = libc(需要iOS 5.0或更高版本)的无效部署目标才能删除此错误 .
只是为了让其他人遇到同样的事情,将其发布到某个地方 . 如果您遵循所有关于设置正确的c库以 Build iOS应用程序的好建议,但仍然会得到未定义符号的链接错误,请确保您的代码文件设置为编译为c!这是将你的.m重命名为.mm和.h为.hpp . 这是小事......