Xcode, сборка и дилибы

Я рассмотрел несколько связанных вопросов и, похоже, не могу найти для себя решения.

В основном я использую libmp3lame.dylib в своем проекте Xcode. В процессе установки lame был создан .dylib и помещен в usr / local / lib, а чтобы Xcode собрал и запустил проект, я изменил пути поиска библиотеки, чтобы включить указанную выше папку. Это прекрасно работает.

Теперь пришло время создать релизную версию, и я хочу включить .dylib в пакет, чтобы пользователю не приходилось мириться с фазой установки или чем-то подобным. Я создал фазу копирования файлов цели, и это выгружает .dylib в папку Frameworks в содержимом пакета. Однако запуск otool в двоичном файле показывает, что вместо использования .dylib внутри пакета компилятор связал его с версией usr / local / lib (даже если я удалю эту версию).

Глядя на другие результаты в выводе otool, у меня есть другие фреймворки, связанные с внутри пакета, но не с .dylib. Глядя на свойства этих фреймворков и .dylib в Xcode, я не вижу никаких различий, кроме типа файла.

Мой поиск подсказывает, что мне нужно использовать rpath или что-то подобное, но я не знаю, где это применить в Xcode.


person Septih    schedule 25.08.2010    source источник


Ответы (2)


Мое решение этой проблемы заключалось в том, чтобы сделать следующее в терминале (я использовал Automator для автоматизации этого):

install_name_tool -id @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/lib/in/app/libmp3lame.0.0.0.dylib

install_name_tool -change /usr/local/lib/libmp3lame.0.dylib @executable_path/../Frameworks/libmp3lame.0.0.0.dylib ~/path/to/app/Contents/MacOS/AppName

В основном меняют путь к библиотеке с той, что находится в локальной библиотеке usr, на ту, которая включена в комплект.

person Septih    schedule 08.11.2011

Мой совет - посмотреть на результат сборки, как он на самом деле запускает ld?

person lericson    schedule 25.08.2010
comment
Я предполагаю, что соответствующая часть ld: -lmp3lame.0.0.0. Имеет ли -l дело с lib частью самого имени файла? В противном случае я запутался, потому что имя файла - libmp3lame.0.0.0.dylib. - person Septih; 25.08.2010
comment
Ах, это так. Я думаю, проблема в том, что он ищет libmp3lame.dylib в каталогах, определенных ранее в сборке (пути поиска библиотеки), но на этапе копирования файлов dylib не помещается в пакет до ld. Итак, новая дилемма состоит в том, как явно указать ему искать библиотеку там, а не просто искать ее в нескольких папках. Все еще не понимаю, почему он связан с папкой usr / local / lib, когда я удалил там .dylib ... - person Septih; 25.08.2010