Подтвердить что ты не робот

Xcode продолжает поиск dylib на неправильном пути

Вот моя ошибка:

dyld: Library not loaded: /usr/local/lib/libofa.0.dylib
Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test
Reason: image not found

Я провел некоторое исследование и изменил путь внутри dylib с помощью install_name_tool:

davids-macbook:Test david$ otool -L libofa.0.0.0.dylib 
libofa.0.0.0.dylib:
@executable_path/../Frameworks/libofa.0.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

Но Xcode продолжает поиск в /usr/lib/:

build/Debug/Test.app/Contents/MacOS/Test:
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
@executable_path/../Frameworks/TagLib.framework/Versions/A/TagLib (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QTKit.framework/Versions/A/QTKit (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libexpat.1.dylib (compatibility version 7.0.0, current version 7.2.0)
/System/Library/Frameworks/Quartz.framework/Versions/A/Quartz (compatibility version 1.0.0, current version 1.0.0)
/opt/local/lib/libcurl.4.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/local/lib/libofa.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 103.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.29.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.29.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.32.0)

Есть ли способ установить это в Xcode??? Благодаря

Изменить: Библиотека не является проектом Xcode. Его построить с. /configure; сделать

4b9b3361

Ответ 1

Обычно я делаю это:

  • Установите Каталог установки библиотеки @rpath. Это установит имя установки @rpath/libofa.0.0.0.dylib. Если вы сами создаете библиотеку, вы можете установить это в Xcode; в противном случае используйте install_name_tool, чтобы изменить его.
  • Установите Пути поиска пути приложения, используя библиотеку, в расположение каталога, содержащего библиотеку. Например, если вы поместили библиотеку в каталог приложений Framework, установите Пути поиска пути на @executable_path/../Frameworks (или @loader_path/../Frameworks).

Это сообщение в блоге и этот деталь.

Ответ 2

Обязательно установите инструменты командной строки с сайта developer.apple.com, а затем добавьте библиотеку в свой проект. Запустите следующий script в вашем Xcode: Targets "Build Phases" Запустите script и просто выполните:

install_name_tool -id @executable_path/../Frameworks/librayName.dylib "$SRCROOT/librayName.dylib"

Примечание: NO "или" "требуется перед именем dylib

Ответ 3

Прежде чем перейти к решению, вы должны знать, что нового с зависимой библиотекой "dylib" в MAC, по сравнению с зависимой библиотекой "dll" в окнах.

Основное отличие в dylib vs dll - "установить имя". Имя установки - это путь, испеченный в динамической библиотеке, где указано, где найти библиотеку во время выполнения. Неважно, где вы копируете свои dylib, всегда указывается на старый путь (за исключением без изменения имени установки). Вы можете узнать исходный путь поиска (установить имя), используя команду ниже

otool -L a.dylib

(просто перетащите dylib вместо a.dylib)

Подробнее о имени установки см. ссылку: http://www.chilkatforum.com/info/4235/how-to-distribute-a-dylib-with-a-mac-os-x-application

Теперь решение для изменения нового местоположения для dylib ( "установить имя" ) просто использует install_name_tool, как показано ниже

install_name_tool -change старый путь dylb новый путь dylib

вы можете получить старый путь командой otool -L, описанной выше (старый путь, то есть исходный путь)

"install_name_tool -change" также может изменить путь поиска dylib и исполняемый файл.

Вы можете использовать это в Xcode, записав в файле "Run script" в своем проекте.