【问题标题】:OpenCV and Pcl builds on OSX result in malformed object (load command ## cmdsize is zero)OpenCV 和 Pcl 在 OSX 上构建导致对象格式错误(加载命令 ## cmdsize 为零)
【发布时间】:2014-04-05 18:46:28
【问题描述】:

从几周前开始,在开启 CUDA 库的 OSX 上构建 OpenCV 或 Pcl 时,我不断收到“格式错误的对象”错误(由于某种原因,禁用 CUDA 时不会发生这种情况)。在安装阶段,会显示以下错误消息(针对不同的命令#s):

install_name_tool: 对象:libopencv_cudev.3.0.0.dylib 格式错误的对象(加载命令 19 cmdsize 为零)

虽然构建和安装过程完成,但生成的库格式错误,可以链接但不能被其他项目加载。

附加信息:我的系统是 OSX Maverick 10.9.2,我尽可能使用系统库和工具(clang、libjpeg 等)和 Macports 用于 OpenCV 等依赖的大多数其他库(cmake 等)。尽管该错误似乎与与 CUDA 相关的构建有关,但可能并非如此,因为小型 CUDA 项目的手动编译工作正常。

【问题讨论】:

    标签: c++ macos opencv cmake


    【解决方案1】:

    我实际上解决了这个问题,但认为分享和记录解决方案可能会很好:

    问题:

    cmake 2.8.12+ 中的错误 - http://public.kitware.com/Bug/view.php?id=14707

    据我所知的解释:

    这个问题与我最初认为的 CUDA 或混合工具链无关。在 CUDA 构建中出现此问题的原因是因为在这些特定构建中运行 install_name_tool 以更改 CUDA 库的 RPATH。该错误是由于 cmake 通过添加两个相同的 LC_RPATHs 来破坏二进制文件和库 - 它似乎来自两个 link_directories() 被解析为相同的最终路径(不同的宏分辨率)。当 install_name_tool 在具有两个相同 LC_RPATHs 的库上运行时,它似乎会损坏它们。

    解决方案:

    1. 保证工作(测试):降级到 cmake 2.8.11
    2. 可能工作:升级到 cmake 发布此提交:http://cmake.org/gitweb?p=cmake.git;a=commit;h=08141a5

    Macports 用户的分步解决方案 1:

    cd some_folder_that_you_keep_source_folders_in
    sudo port uninstall cmake
    svn co -r 110530 http://svn.macports.org/repository/macports/trunk/dports/devel/cmake
    cd cmake
    sudo port install
    

    【讨论】:

      【解决方案2】:

      我在另一个项目中遇到了类似的问题,并通过在 CMakeLists.txt 文件中添加以下内容来设法缓解它:

      SET(CMAKE_SKIP_RPATH TRUE)

      它适用于您的情况吗?

      【讨论】:

        猜你喜欢
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 2011-04-30
        • 2023-02-08
        • 2023-03-03
        相关资源
        最近更新 更多