2 Stimmen

Aufbau einer Open-Source-Bibliothek (liblo) für das iPhone

Ich habe ein iPhone-Projekt mit liblo (liblo.sourceforge.net). Mein Projekt funktioniert gut in den Simulator, aber sobald ich ging, um für das Gerät zu bauen, ld scheitert:

ld: library not found for -llo

Ich vermute, dass dies daran liegt, dass ich gerade die make install als ich liblo heruntergeladen habe. Ich fand eine Gewinde die eine Kreuzkompilierung durch Ausführen von ./configure --host=arm-apple-darwin vor make install aber das scheint das Problem nicht behoben zu haben.

[/usr/local/lib]$ file liblo.dylib 
liblo.dylib: Mach-O dynamically linked shared library i386

Gibt es eine einfache Lösung?

1 Stimmen

Ich habe vielleicht eine Lösung gefunden. I angepasst das Skript von lambdajive und es erzeugte liblo.a, die ich manuell in mein xcode-Projektverzeichnis kopierte und dem Projekt hinzufügte. Scheint zu funktionieren! Ich würde gerne wissen, warum, oder wenn es eine bessere Lösung gibt!

1voto

samvermette Punkte 39991

Nun, hier ist die Datei, kompiliert für OS 3.0. http://www.samvermette.com/files/liblo.a.zip

Fügen Sie es einfach zu Ihrem XCode-Projekt hinzu und schon können Sie loslegen!

1voto

Martijn Thé Punkte 4594

Ich schrieb eine kleines Tutorial zur Erstellung plattformübergreifender iPhone-Bibliotheken die sowohl auf dem Gerät als auch auf dem Simulator laufen.

0 Stimmen

Leider ist dieser Link jetzt tot.

1 Stimmen

Für alle, die das Tutorial noch nicht kennen, einfach hier klicken! web.archive.org/web/20100611094538/http://www.martijnthe.nl/ und besuchen Sie die Wayback-Maschine, um weitere tote Links zu finden

1voto

mikewoz Punkte 146

Hier ist eine aktualisierte Version des Config-Skripts von jkooker für iOS 4: http://gist.github.com/519121

0 Stimmen

Diese wurde nun aktualisiert, um eine universelle (armv6+armv7) Binärdatei zu erstellen.

0 Stimmen

Danke! Ich habe Ihr Skript angepasst, um für iOS+Simulator für iOS 9 zu bauen: github.com/danomatika/PdParty/blob/master/scripts/libs/

0voto

danomatika Punkte 101

Ich bringe das nochmal zur Sprache...

Xcode 12.3+ hat manuell verlinkte Fat Libs, die über Lipo erzeugt wurden, zugunsten von XCFrameworks veraltet. Grundsätzlich M1 Macs teilen jetzt die gleichen arm64 Bogen als iDevices und Xcode ist nicht in der Lage zu sagen, welche Bogen innerhalb der Fett Lib zu verwenden, so wird nicht die arm64 Scheibe zu verknüpfen, wenn in den Simulator ausgeführt. Wenn Sie nur auf dem Gerät über Xcode auf einem M1 Mac laufen, ist es hace funktionieren, aber es ist nicht gerade ideal, dass der Simulator nicht als Option zur Verfügung steht.

Wie in meinem Kommentar zur Antwort von @mikewoz erwähnt, habe ich das Fat-Lib-Skript aktualisiert und es viele Jahre lang verwendet. Ich habe versucht, diesen Ansatz zu verwenden und ein XCFramework über

xcodebuild -create-xcframework -library liblo-ios.a -library liblo-sim.a -output liblo.xcframework

...aber ich konnte das nicht zum Laufen bringen.

Letztendlich habe ich mich dafür entschieden, die liblo-Quellen selbst über ein manuell erstelltes liblo static lib Xcode-Projekt zu erstellen. Dies funktioniert gut und erfordert nur die Einstellung der erforderlichen Defines, entweder über config.h generiert über configure oder setzen Sie sie manuell im Xcode-Projekt. Bislang habe ich mich für die Verwendung von configure und setzen Sie die folgenden Definitionen: -DHAVE_CONFIG_H -DAC_APPLE_UNIVERSAL_BUILD -Qunused-arguments -fno-common -DPIC . En AC_APPLE_UNIVERSAL_BUILD define wird verwendet, um eine Endinaness-Prüfung zur Kompilierzeit in config.h zu aktivieren. Allerdings habe ich nur auf meinem M1 MacBook Pro 13 getestet, so dass ich Hoffnung dieser Ansatz funktioniert auf Intel-Maschinen.

Falls jemand das funktionierende liblo.xcodeproj benötigt, kann er es hier finden: https://github.com/danomatika/PdParty/tree/master/libs/liblo

Die Schritte zur Automatisierung des Herunterladens und Konfigurierens der liblo-Quellen befinden sich im Makefile der Hauptlibs: https://github.com/danomatika/PdParty/blob/master/libs/Makefile

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X