Де я можу встановити DYLD_LIBRARY_PATH на Mac OS X, і чи це гарна ідея?


28

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

Документація про розв’язання говорить про це:

Обов’язково "". у вашому DYLD_LIBRARY_PATHдля того, щоб

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

Я не дуже розумію, що це означає. Де і що мені потрібно змінити?

Я зробив кілька гуглів, але не натрапив на щось досить просто для новачків, як я! Якщо там є пацієнти, які не проти направити мене на інтернет-ресурс або дати мені абі-тести про те, як і де встановити змінні середовища, я був би дуже вдячний.

Відповіді:


20

Це змінна середовище, і як таке зазвичай в Terminal встановлюється

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

попередньо додати .(поточний каталог) до списку пошукових місць. На моїй немодифікованій ОС X DYLD_LIBRARY_PATHне має поточного значення, хоча:

$ echo $DYLD_LIBRARY_PATH

$

Залежно від того, як ви збираєтеся запускати свою програму, вам потрібно буде встановити це по-іншому, наприклад, у Xcode (я не знаю, де все-таки).


1
Я згоден з @TVNshack , що ви повинні , як правило , НЕ встановлені DYLD_LIBRARY_PATHні DYLD_FRAMEWORK_PATH, тому що це може запобігти цій навантажену LIBS знайти забезпечується систему LIBS. Щоб зробити цю роботу краще, використовуйте замість неї FALLBACKверсії. Більш детальна інформація в цій відповіді: stackoverflow.com/a/3172515/43615
SuperTempel

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

Це так просто.


Швидкий FYI: install_name_tool з тихою помилкою, якщо новий шлях довший шляху, який він замінює. Завжди переконайтесь у 'otool -L', чи змінили шлях так, як очікувалося.
користувач15685

Скажімо, я складаю плагін (в основному сам по собі динамічна бібліотека), який залежить від іншої динамічної бібліотеки. Як я можу подати плагін і його залежності для інших користувачів?
Рой

Якщо ви замість цього встановите DYLD_FALLBACK_FRAMEWORK_PATH, у цьому випадку це дійсно працює. Це набагато простіше, ніж змінювати внутрішні шляхи ліб, особливо якщо вам потрібно доставити вбудовані диліби за допомогою свого додатка, і ви не можете передбачити шлях, який вони закінчать.
SuperTempel

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.