首页 文章

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

提问于
浏览
5

我的项目工作得很好,直到今天早上 . 我使用的是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 回答

  • 6

    不使用官方网站的opencv安装指南中给出的终端命令,而是使用以下命令从终端构建opencv . 为我工作 .

    cd OpenCV-2.3.1

    mkdir build

    cd build

    cmake -G“Unix Makefiles”..

    使

    sudo make install

  • 0
    • Go Xcode / General / Linked Frameworks and Libraries

    • 按"+"按钮

    • 类型:AssetsLibrary

    • 选择"AssetsLibrary.framework"并导入它

    Done

    Good luck!

  • 1

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

    Having the right tools

    Use cmake to compile 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
    

    从构建文件夹

    • ,转到bin /并运行其中一个测试
    ./opencv_test_stitching
    

    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

    干杯 .

  • 0

    您的项目似乎缺少框架AssetsLibrary .

    • 在项目导航器中选择顶部节点 . (将显示包含构建设置的项目和目标页面 . )

    • 选择目标 .

    • 选择摘要 .

    • 向下滚动到Linked Frameworks and Libraries .

    • 单击表末尾的加号图标,然后选择AssetsLibrary.framework .

    • 单击“添加” .

    然后尝试再次构建它 .

  • 1

    因为我可以将这个作为答案发布,因为它至少解决了这个问题 . 这被描述为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版本兼容 .

  • 4

    clang:错误:-stdlib = libc(需要iOS 5.0或更高版本)的无效部署目标才能删除此错误 .

    GoTo BuildSettings . 将c标准库设置为编译器默认值 . 该错误肯定会被删除 .

  • 4

    只是为了让其他人遇到同样的事情,将其发布到某个地方 . 如果您遵循所有关于设置正确的c库以 Build iOS应用程序的好建议,但仍然会得到未定义符号的链接错误,请确保您的代码文件设置为编译为c!这是将你的.m重命名为.mm和.h为.hpp . 这是小事......

相关问题