将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的未定义符号:
"\u OBJC\u CLASS\u$\ u AlassetLibrary",引用自:
opencv2中的objc class ref(cap\u ios\u video\u 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
ld:未找到架构armv7的符号
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
为了使用新的opencv框架,我删除了对旧框架的引用,并将该项目引用到了官方预构建的opencv2。从此处下载框架。
我还删除了对libz。动态库, 并添加了对libc++。动态库 相反
最后一步是将前缀文件更新为新框架。前缀文件中的相关部分现在如下所示:
这一切都缩小到这4个链接器错误,我似乎无法摆脱。我试过使用libstdc++。动态库, 但我犯了更多的错误。正如这里所解释的,我也尝试过自己构建OpenCV,但仍然会遇到与预构建框架相同的错误。
我错过了什么?在我的项目中还有什么我需要改变的吗?
更新:
如图所示,将"C++标准库"设置为"libc++(支持C++11的LLVM C++标准库",只产生一个错误:
clang:错误:stdlib=libc++的部署目标无效(需要iOS 5.0或更高版本)
将部署目标更改为iOS 5最终使我的项目重新运行。
这是否意味着OpenCV 2.4.3不适用于早于5的iOS版本?
回答:1
你的项目似乎缺少框架资产库.
-
在项目导航器中选择顶部节点。(此时会出现包含生成设置的项目和目标页面。)
-
选择目标。
-
选择总结.
-
向下滚动至链接框架和库.
-
点击加 图标,然后选择资产图书馆。框架.
-
点击添加.
然后试着再建造一次。
回答:2
由于我似乎无法得到有关版本的答案(无论是在这里还是在OpenCV Q&A网站),我将把这篇文章作为一个答案发布,因为它至少解决了这个问题. 这里描述了这一点。
在你的项目中构建设置, 去那一区Apple LLVM编译器4.1语言.
那里:
设置C++语言方言 到编译器默认值
设置C++标准库 到libc++(LLVM C++标准库,支持C++11
在完成上述操作后,我不再收到那些链接器错误,而是只收到一个错误,即只支持iOS 5及以上版本. 改变部署目标 在这个项目中,萨默里做到了5.0。
最后,关于OpenCV 2.4.3与iOS 5以上版本的兼容性,我仍然不确定这意味着什么。
回答:3
clang:error:stdlib=libc++(需要iOS 5.0或更高版本)的部署目标无效,无法删除此错误。
转到BuildSettings。将c++标准库设置为编译器默认值。这个错误肯定会被消除。
回答:4
使用cmake 2.8.10和xcode 4.6.1在mac os x lion 10.7.5上编译和运行c++opencv 2.4.4的步骤
拥有正确的工具
- 从下载opencv unixhttp://sourceforge.net/projects/opencvlibrary/files/把它解到任何地方
- 下载cmake.dmg来自http://www.cmake.org/cmake/resources/software.html然后安装它
- 我假设您在os x lion上有xcode 4.6,其中包括ios sdk 6.1
- 转到xcode首选项下载并安装命令行工具,这样就有了g++等。
使用cmake编译opencv
- 转到解压缩的opencv文件夹
-
创建一个构建目录
-
在build文件夹中,转到bin/并运行其中一个测试
创建自己的c++opencv xcode项目
- 启动xcode并创建一个新的xcode项目
- 为os x下的项目类型选择命令行工具
- 打开项目的生成设置
- 在"体系结构"下,将"体系结构"设置为64位英特尔。还将有效的体系结构设置为x86_64
- 在"构建选项"下,将C/C++编译器设置为默认编译器
- 在"搜索路径"下,将标题搜索路径设置为/usr/local/include
- 同样在搜索路径下,将库搜索路径设置为/usr/local/lib
- 在Apple LLVM compiler 4.2-语言下,将C++标准库设置为libstd++(对于OpenCV 2.4.6、Xcode 5、LLVM 5.0和10.8.5,将语言方言和std库都设置为"编译器默认值",而不是"libstd++")
将编译后的opencv库添加到项目中
- 转到您所在的"生成设置"选项卡旁边的"生成阶段"选项卡
- 在"将二进制文件链接到库"中,单击+号并选择"添加其他"
- 点击键盘上的前斜杠/并输入/usr/local/lib
- 点击回车键,选择要在项目中使用的库
- 确保始终选择libopencv_core.2.4.4.动态库
- 按enter键,您将在项目下看到选定的动态库
写一些代码
- 首先,让我们组织文件,右键单击项目蓝图图标并选择新建组
- 将新组命名为opencv或其他名称
- 拖动dylib并将其放到该组中
- 打开主管道.cpp
- 从opencv附带的任何示例测试中复制代码,并将其粘贴到此处
- 确保添加了所有必需的DYLIB,例如,如果复制了opencv_测试_缝合。将cpp代码转换为main.cpp,您需要在前面的步骤libopencv_core中添加以下库.2.4.4.dylib libopencv_highgui.2.4.4.dylib libopencv_缝合.2.4.4.动态库
干杯
回答:5
只是为了把这个放到帖子里,以防其他人遇到同样的事情. 如果您遵循了所有关于为构建iOS应用程序而设置适当的c++库以进行链接的建议,但仍然会收到未定义符号的链接错误,请确保您的代码文件设置为c++编译!这就是你的名字。我要去。嗯,还有.h到。水电站. 是一些小事情。。。
.回答:6
不要使用官方网站opencv安装指南中给出的终端命令,而是使用以下命令从终端构建opencv。为我工作。
cd OpenCV-2.3.1
mkdir构建
cd构建
cmake-G"Unix Makefiles"。。
制作
sudo make安装
回答:7
- 转到Xcode/通用/链接框架和库
- 按"+"按钮
- 类型:资产库
- 选择"AssetsLibrary.framework"并导入它
多恩
祝你好运