Xcode, изграждане и dylibs

Разгледах няколко свързани въпроса и изглежда не мога да намеря решение за себе си.

По принцип използвам 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 local lib към тази, включена в пакета.

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