26

Я пытаюсь установить решатель, написанный на C++, на моем Mac (OS X) для использования с кодом, написанным на XCode.

Документация решателя говорит это:

Обязательно иметь "." в вашем DYLD_LIBRARY_PATH , чтобы

  • запустить готовые исполняемые файлы
  • связь с libamg.dylib (и gfortran RTSlibs)

Я не очень понимаю, что это значит. Где и что мне нужно что-то менять?

Я немного погуглил, но не нашел ничего настолько простого для новичка, как я! Если бы были какие-то терпеливые люди, которые не возражали бы направить меня на онлайн-ресурс или дать информацию о том, как и где устанавливать переменные среды, я был бы очень благодарен.

3 ответа3

21

Никогда не следует устанавливать export DYLD_LIBRARY_PATH в вашей системе.

Пути к общим библиотекам можно исправить с помощью otool -L и install_name_tool .

Например, если вы скомпилируете Perl DBD-MySQL, вы не сможете его использовать, так как компоновщик не знает, где вы установили MySQL.

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

Это так просто.

18

Это переменная окружения, поэтому она обычно устанавливается в Терминале

export DYLD_LIBRARY_PATH=someValue

man dyld говорит:

DYLD_LIBRARY_PATH

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

Для каждой библиотеки, которую использует программа, динамический компоновщик ищет ее в каждом каталоге в DYLD_LIBRARY_PATH по очереди. Если он по-прежнему не может найти библиотеку, он выполняет поиск по DYLD_FALLBACK_FRAMEWORK_PATH и DYLD_FALLBACK_LIBRARY_PATH .

Используйте опцию -L для otool(1) . чтобы обнаружить рамки и разделяемые библиотеки, с которыми связан исполняемый файл.


Вы, вероятно, хотели бы что-то вроде

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

готовиться . (текущий каталог) к списку мест поиска. На моей неизмененной OS X DYLD_LIBRARY_PATH не имеет текущего значения, хотя:

$ echo $DYLD_LIBRARY_PATH

$

В зависимости от того, как вы собираетесь запускать вашу программу, вам нужно будет установить это по-разному, например, в Xcode (хотя я не знаю, где).

7

В Xcode 4 вы можете добавить его в схему проекта, чтобы избежать ошибок, подобных этой:

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. В меню выберите "Продукт" -> "Изменить схему" -> вкладку "Аргументы" -> Добавить "Переменные среды" -> Ключ: DYLD_LIBRARY_PATH Значение: /Users /MyUserAccount /path /to /lib

  2. Измените путь к вашей учетной записи пользователя и полный путь к папке библиотеки.

  3. Вы должны быть в состоянии построить и запустить.

Установка DYLD_LIBRARY_PATH в Xcode 4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .