otool输出中的相对路径?

时间:2014-10-18 11:37:34

标签: c++ linker otool

我在使用C ++编译的库文件时遇到了一些问题,所以我使用otool命令行实用程序(在OSX上)来查看它链接的文件。

这是输出:

! otool -L pyopenvdb.so 
pyopenvdb.so:
    pyopenvdb.so (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/tbb/lib/libtbb.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/lib/libHalf.11.dylib (compatibility version 12.0.0, current version 12.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/local/lib/libIlmImf-Imf_2_1.21.dylib (compatibility version 22.0.0, current version 22.0.0)
    /usr/local/lib/libjemalloc.1.dylib (compatibility version 0.0.0, current version 0.0.0)
    /System/Library/Frameworks/Python.framework/Versions/2.7/Python (compatibility version 2.7.0, current version 2.7.5)
    libboost_python.dylib (compatibility version 0.0.0, current version 0.0.0)
    libopenvdb.so.2.3.0 (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

链接的大多数文件都是由绝对路径引用的,例如/usr/local/opt/tbb/lib/libtbb.dylib

然而,有些是通过似乎是相对路径引用的,就像文件名一样,例如libboost_python.dylib

这是什么意思?

是否意味着在运行时可以链接不同版本的libboost_python.dylib,具体取决于路径上首先找到的内容?或者是搜索这些“相对”路径的其他方法吗?

1 个答案:

答案 0 :(得分:1)

这没问题。这意味着你没有绝对路径的图书馆就你所拥有的东西而言是相对的(pyopenvdb.so)。 但是,如果要将其标准化,可以使用install_name_tool更改路径。在您提到的情况下,请使用-change参数。

Usage: install_name_tool [-change old new] ... [-rpath old new] ... [-add_rpath new] ... [-delete_rpath old] ... [-id name] input

例如,install_name_tool pyopencdv.so -change libboost_python.dylib /usr/local/lib/libboost_python.dylib

请注意,您还会在第一行输出中看到pyopenvdb.so也引用了它自己。当然这是一个相对路径,但是如果你想使用install_name_tool,即使 也可以改为绝对路径,为此,请使用' -id'参数。