基于OSX的OpenCV和Pcl构建导致格式错误的对象(加载命令## cmdsize为零)

时间:2014-04-05 18:46:29

标签: c++ macos opencv cmake

几个星期前,我一直在收到#"格式错误的对象"在使用CUDA库的OSX上构建OpenCV或Pcl时出错(出于某种原因,当CUDA被禁用时不会发生这种情况)。在安装阶段,将显示以下错误消息(对于不同的命令#s):

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

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

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

2 个答案:

答案 0 :(得分:2)

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

问题:

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的lib上运行时,它似乎会破坏它们。

<强>解决方案:

  1. 保证工作(已测试):降级至cmake 2.8.11
  2. 可能会工作:升级到cmake发布此提交:http://cmake.org/gitweb?p=cmake.git;a=commit;h=08141a5
  3. 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
    

答案 1 :(得分:0)

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

  

SET(CMAKE_SKIP_RPATH TRUE)

它适用于您的情况吗?