【问题标题】:Reference shared libraries using relative paths or library names on OS X?在 OS X 上使用相对路径或库名称引用共享库?
【发布时间】:2014-02-19 04:49:58
【问题描述】:

似乎 OS X 上的共享库被引用为绝对路径:

$ otool -L /bin/ls
/bin/ls:
    /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

在 Linux 上,库大多以它们的名称来引用。我可以改变这种行为吗?

谢谢!

编辑:我检查了 FreeBSD,它的工作方式与 Linux 相同。我想知道这是否只是链接器的问题,但是在我在 OS X 上使用 gcc(不是 clang)之后,它并没有改变任何东西。

【问题讨论】:

  • 这个运气好吗?我现在也面临着类似的问题。
  • @IneQuation 不,仍然没有运气。

标签: macos shared-libraries


【解决方案1】:

您可以使用install_name_tool 修复这些路径。最好使用-id 选项在共享库上执行此操作,但您也可以使用-change 修复可执行文件。详情咨询man install_name_tool

我将共享库上的安装名称更改为@loader_path/libfoo.1.2.3.dylib,并使用可执行文件重新分发libfoo.1.2.3.dylib。如果您在网上搜索 rpath executable_path loader_path,您会找到有关 @paths 是什么的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 2018-11-06
    • 2012-04-08
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    相关资源
    最近更新 更多