2017-02-13 5 views
2

Я работаю над разработкой рамки dylib macOS, разработанной вне Xcode, и я пытаюсь понять значение опции install_name.Какое значение имеет имя macOS Mach-O dylib LC_ID_DYLIB или имя_строки?

Например, я могу установить LC_ID_DYLIB раздел name на нечто более похожее на то, что вы нашли бы в структуре приложения, используя аргумент install_name.

clang++ ... -install_name @executable_path/../Frameworks/somelib.framework/Versions/somelib ... 

Тогда с otool -l я могу видеть, что мое имя было установлено в двоичном, отличается от значения по умолчанию (который соответствует -o параметра по умолчанию).

otool -l somelib 
... 
      cmd LC_ID_DYLIB 
     cmdsize 96 
     name @executable_path/../Frameworks/somelib.framework/Versions/A/somelib (offset 24) 
    time stamp 1 Wed Dec 31 19:00:01 1969 
     current version 1.0.0 
compatibility version 1.0.0 
.... 

Так что я понимаю, как это сделать, но то, что я не понимаю, что именно значение используется для знать, что это должно быть, и я не могу найти какую-либо документацию на него.

Я вижу, почему секции LC_LOAD_DYLIB нуждаются в информации о том, где найти двоичный файл (поскольку эти разделы ссылаются на другие двоичные файлы), но почему дилибу нужна информация о том, где найти себя? Бинар, который ссылается на него, должен быть тем, который его находит?

Так что же такое macOS dylib LC_ID_DYLIBinstall_name do?

ответ

4

Любые клиенты, которые ссылаются на dylib, записывают путь, указанный в команде загрузки LC_ID_DYLIB, как путь, по которому можно найти dylib во время выполнения. Это полезно, поскольку путь, в котором живет dylib во время сборки, часто не там, где он будет найден во время выполнения.

+0

Думаю, я понимаю, что вы имеете в виду. Имеет ли смысл говорить: «Это путь, который будет скопирован в двоичные файлы, которые ссылаются на него»? –

+0

Да, это точно. – bdash

Смежные вопросы