加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 将Xcode升级到4.5.2并将OpenCV升级到2.4.3后出现链接器错

发布时间:2020-12-15 01:45:30 所属栏目:百科 来源:网络整理
导读:我的项目工作得很好,直到今天早上.我使用的是xcode 4.3,以及旧版本的OpenCV(我不确定确切的版本). OSX已经是10.7.x,但不是10.7.5 今天,在将OSX升级到10.7.5,xcode升级到4.5.2,并下载OpenCV 2.4.3后,我在尝试构建项目时遇到以下链接器错误: Undefined symbol
我的项目工作得很好,直到今天早上.我使用的是xcode 4.3,以及旧版本的OpenCV(我不确定确切的版本). OSX已经是10.7.x,但不是10.7.5

今天,在将OSX升级到10.7.5,xcode升级到4.5.2,并下载OpenCV 2.4.3后,我在尝试构建项目时遇到以下链接器错误:

Undefined symbols for architecture armv7:
“_OBJC_CLASS_$_ALAssetsLibrary”,referenced from:
objc-class-ref in opencv2(cap_ios_video_camera.o)
“cv::FeatureDetector::create(std::string const&)”,referenced from:
-[ImageAnalyzer detectBlobs:] in ImageAnalyzer.o
“cv::FeatureDetector::detect(cv::Mat const&,std::vector >&,cv::Mat const&) const”,referenced from:
-[ImageAnalyzer detectBlobs:] in ImageAnalyzer.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

为了使用新的opencv框架,我删除了对旧框架的引用,并将项目引用到从here下载的官方预构建的opencv2.framework.
我还删除了对libz.dylib的引用,并添加了对libc .dylib的引用.
最后一步是将前缀文件更新为新框架.前缀文件中的相关部分现在如下所示:

#ifdef __cplusplus
#import <opencv2/opencv.hpp>
#endif

这一切都缩小到这4个链接器错误我似乎无法摆脱.我尝试使用libstdc .dylib,但我得到的错误更多.我也尝试过自己构建OpenCV,如here所述,但我仍然遇到与预构建框架相同的错误.

我错过了什么?我的项目还需要改变什么吗?

更新:
如here所示,将“C标准库”设置为“libc(具有C 11支持的LLVM C标准库”)仅产生一个错误:

clang: error: invalid deployment target for -stdlib=libc++ (requires iOS 5.0 or later)

将部署目标更改为iOS 5终于让我的项目再次运行.
这是否意味着OpenCV 2.4.3不适用于5岁以上的iOS版本?

解决方法

使用cmake 2.8.10和xcode 4.6.1在mac os x lion 10.7.5上编译和运行c opencv 2.4.4的步骤

拥有合适的工具

>从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等.

使用cmake编译opencv

>转到解压缩的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

>从build文件夹中,转到bin /并运行其中一个测试

./opencv_test_stitching

创建自己的c opencv xcode项目

>启动xcode并创建一个新的xcode项目
>为os x下的项目类型选择命令行工具
>打开项目的构建设置
>在架构下,将架构设置为64位英特尔.还将Valid Architectures设置为x86_64
>在Build Options下,将Compiler for C/C++设置为Default Compiler
>在“搜索路径”下,将“标题搜索路径”设置为/usr/local / include
>也在“搜索路径”下,将“库搜索路径”设置为/usr/local / lib
>在Apple LLVM编译器4.2下 – 语言集C标准库到libstd(对于OpenCV 2.4.6,Xcode 5,LLVM 5.0和10.8.5,将语言方言和标准库设置为“编译器默认值”而不是“libstd”)

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

>转到您所在的“构建设置”选项卡旁边的“构建阶段”选项卡
>在Link Binary With Libraries中,单击符号并选择Add Other
>点击键盘上的前斜杠/并输入/usr/local / lib
>按Enter键并选择要在项目中使用的库
>确保始终选择libopencv_core.2.4.4.dylib
>按Enter键,您将在项目下看到所选的dylib

写一些代码

>首先让我们整理文件,右键单击项目蓝图图标,然后选择新建组
>将新组命名为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

干杯.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读