5

我有一个命令行可执行文件,其中包含指向 dylib 的链接——分发时——不会位于otool -L.

例如,给定一个名为 的二进制文件foo

$ otool -L foo
  /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
  ...

在我的安装程序中,我有一个安装后脚本试图用来install_name_tool -change解决这个问题,以便foo链接到新位置的 dylib。

例如:

$ sudo install_name_tool -change /opt/local/lib/libgcc/libstdc++.6.dylib /somewhere/else/more/sensible/libstdc++.6.dylib foo

但是这种变化被忽略了,默默地失败了。当我otool -L再次运行时:

$ otool -L foo
  /opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.18.0)
  ...

没有改变。

我正在编译胖二进制文件并尝试将-headerpad_max_install_names编译标志添加到 32 位 Makefile。这并没有解决问题,因为它install_name_tool -change仍然默默地失败。

我读到它-headerpad_max_install_names在 64 位平台上没有任何作用,但我还是将它添加到 64 位 Makefile 中。可以预见的是,这也没有解决问题。

如何修复我的编译过程,以便最终可以更改链接 dylib 的路径install_name_tool

4

0 回答 0