将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

你的项目似乎缺少框架资产库.

  1. 在项目导航器中选择顶部节点。(此时会出现包含生成设置的项目和目标页面。)

  2. 选择目标。

  3. 选择总结.

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

  5. 点击 图标,然后选择资产图书馆。框架.

  6. 点击添加.

然后试着再建造一次。

回答: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的步骤

拥有正确的工具

  1. 从下载opencv unixhttp://sourceforge.net/projects/opencvlibrary/files/把它解到任何地方
  2. 下载cmake.dmg来自http://www.cmake.org/cmake/resources/software.html然后安装它
  3. 我假设您在os x lion上有xcode 4.6,其中包括ios sdk 6.1
  4. 转到xcode首选项下载并安装命令行工具,这样就有了g++等。

使用cmake编译opencv

  1. 转到解压缩的opencv文件夹
  2. 创建一个构建目录

  3. 在build文件夹中,转到bin/并运行其中一个测试

创建自己的c++opencv xcode项目

  1. 启动xcode并创建一个新的xcode项目
  2. 为os x下的项目类型选择命令行工具
  3. 打开项目的生成设置
  4. 在"体系结构"下,将"体系结构"设置为64位英特尔。还将有效的体系结构设置为x86_64
  5. 在"构建选项"下,将C/C++编译器设置为默认编译器
  6. 在"搜索路径"下,将标题搜索路径设置为/usr/local/include
  7. 同样在搜索路径下,将库搜索路径设置为/usr/local/lib
  8. 在Apple LLVM compiler 4.2-语言下,将C++标准库设置为libstd++(对于OpenCV 2.4.6、Xcode 5、LLVM 5.0和10.8.5,将语言方言和std库都设置为"编译器默认值",而不是"libstd++")

将编译后的opencv库添加到项目中

  1. 转到您所在的"生成设置"选项卡旁边的"生成阶段"选项卡
  2. 在"将二进制文件链接到库"中,单击+号并选择"添加其他"
  3. 点击键盘上的前斜杠/并输入/usr/local/lib
  4. 点击回车键,选择要在项目中使用的库
  5. 确保始终选择libopencv_core.2.4.4.动态库
  6. 按enter键,您将在项目下看到选定的动态库

写一些代码

  1. 首先,让我们组织文件,右键单击项目蓝图图标并选择新建组
  2. 将新组命名为opencv或其他名称
  3. 拖动dylib并将其放到该组中
  4. 打开主管道.cpp
  5. 从opencv附带的任何示例测试中复制代码,并将其粘贴到此处
  6. 确保添加了所有必需的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
  1. 转到Xcode/通用/链接框架和库
  2. 按"+"按钮
  3. 类型:资产库
  4. 选择"AssetsLibrary.framework"并导入它

多恩

祝你好运