几个星期前,我一直在收到#"格式错误的对象"在使用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项目的手动编译工作正常,因此可能并非如此。
答案 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上运行时,它似乎会破坏它们。
<强>解决方案:强>
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)
它适用于您的情况吗?