Относительные пути в выходе 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 может быть связано с, в зависимости от того, что найдено первым на пути? Или это какой-то другой метод поиска этих «относительных» путей?

2

Решение

Это не проблема. Это означает, что ваша библиотека без абсолютного пути является относительной по отношению к тому, что у вас есть otool’ed (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’.

1

Другие решения


По вопросам рекламы [email protected]