2008-12-07 19 views
16

Istnieje biblioteka z otwartym kodem źródłowym, z której chciałbym korzystać w mojej aplikacji na iPhone'a. Biblioteka jest napisana w C i kompiluje się z Makefile. Chciałbym użyć biblioteki statycznej.Tworzenie biblioteki statycznej dla iPhone'a

Jeśli dodaję plik .a do moich zależności projektu, działa on dobrze z symulatorem, ale nie łączy się z nim podczas kierowania na iPhone SDK (z pewnością dlatego, że plik .a jest kompilowany dla platformy Intela).

Jakie flagi kompilatora GCC należy użyć do kompilacji biblioteki statycznej dla iPhone SDK? Pomyślałem, że opcja "-arch" zapewni mi architekturę iPhone'a, ale bez powodzenia.

Każda pomoc zostanie doceniona.

Odpowiedz

3

Spróbuj skompilować z arm-apple-darwin-gcc jako aplikacją GCC. Następnie możesz użyć lipo, aby scalić 2 statyczne biblioteki (ramię i 386), tak aby rozwój na linii sim w porównaniu do urządzenia był płynny.

+0

Dzięki za informację. Nadal staram się, aby biblioteka była kompilowana za pomocą arc-apple-darwin-gcc ... –

1

Po kilku próbach użycia kompilatora GCC ramienia z dostarczonymi końcówkami here, poddałem się. W moim przypadku znacznie łatwiej jest po prostu przenieść bibliotekę do XCode, niż próbować skompilować bibliotekę statyczną dla iPhone'a.

6

Dla biblioteki opartej autoconf, będę głosować na Christophera Stawarz Build skryptu:

http://pseudogreen.org/blog/build_autoconfed_libs_for_iphone.html

Z tego skryptu można zautomatyzować cały proces z jednego polecenia i łatwo wymyślić pliki binarne biblioteki dla różnych platformy, takie jak iPhoneOS 2.0/2.1/2.2/2.2.1 i iPhoneSimulator 2.0/2.1/2.2/2.2.1.

Jednak z powodu ustawienia kompilacji $ (SDKROOT) stały się krótkie nazwy, takie jak "macosx10.5", "iphoneos2.2.1" lub "iphonesimulator2.2.1". Tak więc sposób, o którym wspomniał w artykule o ustawianiu ścieżki wyszukiwania w Xcode dla biblioteki i nagłówka, nie zadziała (w Xcode 3.1). Musisz samodzielnie zakodować ścieżkę.

+2

Ktoś ma bardziej aktualną odpowiedź na ten problem? – Alper

1

Po prostu skompiluj go normalnie za pomocą x86 sdk (symulator iphone), a następnie ponownie używając platformy dla arm/ios (arm-xxx-xxx), a następnie połącz obie statyczne biblioteki w .a używając "LIPO" (narzędzie wiersza poleceń). Działa gratująco i jest prostsze niż wymyślanie koła (przynajmniej dla tych niewielkich bibliotek) ... robiłem to z liblo i libdmtx i nie mam żadnych problemów i zajęło mi to 10 minut, aby zrobić ... :-)