install_name_tool 格式错误的对象(加载命令 23 cmdsize 为零) - Mac OS X Yosemite

Posted

技术标签:

【中文标题】install_name_tool 格式错误的对象(加载命令 23 cmdsize 为零) - Mac OS X Yosemite【英文标题】:install_name_tool malformed object (load command 23 cmdsize is zero) - Mac OS X Yosemite 【发布时间】:2015-01-05 11:17:39 【问题描述】:

在 Yosemite 上为 torch 安装 cunn 失败,并出现格式错误的对象错误。

 -- Install configuration: "Release"
-- Installing: /usr/local/lib/luarocks/rocks/cunn/scm-1/lib/libcunn.so
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: object: /usr/local/lib/luarocks/rocks/cunn/scm-1/lib/libcunn.so malformed object (load command 23 cmdsize is zero)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool: object: /usr/local/lib/luarocks/rocks/cunn/scm-1/lib/libcunn.so malformed object (load command 23 cmdsize is zero)
-- Installing: /usr/local/lib/luarocks/rocks/cunn/scm-1/lua/cunn/init.lua
-- Installing: /usr/local/lib/luarocks/rocks/cunn/scm-1/lua/cunn/test.lua
Updating manifest for /usr/local/lib/luarocks/rocks
cunn scm-1 is now built and installed in /usr/local/ (license: BSD)

在线搜索显示这与库损坏或 install_name_tool 更新有关。我将 XCode(6.1) 中的 install_name_tool 替换为 /usr/bin,但我仍然遇到同样的错误。下面是一些诊断

$ ls -l $(which install_name_tool)
-rwxr-xr-x  1 root  admin  14192 Nov  8 11:25 /opt/local/bin/install_name_tool

$ otool -L /usr/bin/install_name_tool
/usr/bin/install_name_tool:
    /usr/lib/libxcselect.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)


$ pkgutil --file-info /usr/bin/install_name_tool
volume: /
path: /usr/bin/install_name_tool

pkgid: com.apple.pkg.Essentials
pkg-version: 10.10.0.1.1.1412852630
install-time: 1413599255
uid: 0
gid: 0
mode: 755

我需要这个才能工作,以便我可以将 CUDA 与 Torch 一起使用,我已经花费了几个小时,请帮忙。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我通过在本地构建 libcunn.so 解决了它。 运行以下命令:

git clone https://github.com/torch/cunn.git
ls cunn
cmake -E make_directory build
cd build/
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="/usr/local/bin/.." -DCMAKE_INSTALL_PREFIX="/usr/local/lib/luarocks/rocks/cunn/scm-1" && make

那你应该有

Linking CXX shared module libcunn.so

然后只需将库复制到目标文件夹:

cp libcunn.so /usr/local/lib/lua/5.1/libcunn.so

【讨论】:

以上是关于install_name_tool 格式错误的对象(加载命令 23 cmdsize 为零) - Mac OS X Yosemite的主要内容,如果未能解决你的问题,请参考以下文章

OSX Dylibs 的 Qt .pro 文件设置而不是 install_name_tool?

MACOS上install_name_tool有时无法改变rpath

install_name_tool 更新可执行文件以在 Mac OS X 中搜索 dylib

Mac 下打包的几个工具

复制 json 文件时出现 Amazon Redshift 错误 - JSONPath 格式无效:成员不是对象

E2045 错误的对象文件格式:“XXX.obj”