2011-11-12 7 views
9

Używam xcode 4 do budowy aplikacji kakao z prywatnym dylib/ramy.Zbuduj pakiet aplikacji kakao z prywatnym dylib/framework

W moim rozwoju Mac, umieściłem dylib w katalogu/usr/local/lib i przeciągnąłem go do projektu.

Aplikacja jest skompilowana i działa idealnie na moim komputerze.

Aby rozpowszechnić tę aplikację na innym komputerze Mac, tworzę fazę tworzenia kopii pliku i mówię "skopiuj tę dylib do katalogu ramek".

Aplikacja została pomyślnie zbudowana i rzeczywiście widzę, że dylib jest kopiowany do katalogu Frameworks w pakiecie aplikacji.

Problem polega na tym, że uruchamiam tę aplikację na innym zwykłym Macu, na którym nie zainstalowano tego dylib. I pojawia się błąd mówiąc:

dyld: Library not loaded: /usr/local/lib/mylib.dylib 
+0

Budujesz bibliotekę ze źródła, czy otrzymałeś ją z już zbudowanego? –

Odpowiedz

9

Problem wynika z faktu, że kopiuje ramy do aplikacji pakietu, więc jest dostępny przy sąsiednich, takich jak:

<you_app_path>/Contents/Frameworks 

ale próby załadowania to od /usr/local/lib, gdzie nie jest dostępna na twoim komputerze. Od Apple Framework Programming Guide:

Aby osadzić ramy w aplikacji, istnieje kilka kroków, które należy wykonać:

należy skonfigurować fazy budowania swojej docelowej aplikacji, aby umieścić ramy w odpowiednim miejscu.

Musisz skonfigurować katalog instalacyjny obiektu docelowego, który przekazuje strukturę, w której będzie działać.

Należy skonfigurować docelową aplikację tak, aby odwoływała się do struktury w katalogu instalacyjnym.

Teraz mówisz, że faza budowy jest w porządku; Zakładam również, że poprawnie wysłałeś ustawienie kompilacji docelowej aplikacji. Pozostaje konfiguracja katalogu instalacyjnego szkieletu docelowego.

Jeśli nie zbudowałeś ram samodzielnie, powinieneś być w stanie to naprawić, zmieniając ścieżkę instalacji szkieletu tak, aby była zdefiniowana względem modułu ładującego (twojej aplikacji), na przykład: @loader_path/../Frameworks/ (lub @executable_path/../Frameworks). Możesz to zrobić za pomocą install_name_tool.

Jeśli kompilujesz samodzielnie prywatną strukturę, możesz zdefiniować jej lokalizację instalacji w ustawieniach kompilacji Xcode.

+0

Tak. ta metoda działa. Przynajmniej mogę pozwolić aplikacji załadować prywatną strukturę na maszynie wdrażania. Ale pojawia się kolejny błąd. Struktura prywatna łączy kilka bibliotek (/usr/lib/libiconv.dylib libcurl, ... etc). Używam otoka do sprawdzenia ścieżki biblioteki i pokazuje /usr/lib/lib *** Mój problem polega na tym, jak ustawić ścieżkę tych bibliotek? – ianXian

+0

Z dylibs możesz użyć install_name_tool i podać @loader_path /../ Frameworks/(not executable_path). – sergio

Powiązane problemy