Kompilieren Sie libgcrypt für das iPhone? Linker-Fehler ... kann anscheinend "fwrite" und "strerror" nicht finden?
Ich habe erfolgreichCross-Compilierung der Apache Portable Runtime (APR) für das iPhoneunter Verwendung eines Satzes vonSkripte konfigurieren das ruft die GNU Autotools "./configure" mit den erforderlichen Optionen für die Kompilierung auf.
Ich versuche jetzt, GNUTLS zu kompilieren, was von libtasn1 und von libgcrypt abhängt, was wiederum von libgpg-error abhängt. Hier gerate ich in Schwierigkeiten und könnte Ihre Hilfe gebrauchen ...
Ich versuche gerade, libgpg-error zu kompilieren. Die zuvor verwendeten Konfigurationsskripte funktionieren einwandfrei. Der Prozess "./configure" wird ordnungsgemäß abgeschlossen. Die Probleme treten auf, wenn ich "make" starte. Wenn ich make starte, scheint alles zu kompilieren, aber am Ende erhalte ich den folgenden bösen Linker-Fehler:
/bin/sh ../libtool --tag=CC --mode=link /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o ./libgpg-error.la /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib ./.libs/libgpg-error.a Undefined symbols: "_fwrite$UNIX2003", referenced from: _main in gpg_error-gpg-error.o "_strerror$UNIX2003", referenced from: _gpg_strerror in libgpg-error.a(libgpg_error_la-strerror.o) ld: symbol(s) not found collect2: ld returned 1 exit status make[3]: *** [gpg-error] Error 1 make[2]: *** [all] Error 2 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2
Irgendwelche Ideen, wie man das zum Laufen bringt? Die Versionen der Software, die ich kompiliere, sind:
libgpg-Fehler: 1.7libgcrypt: 1.4.4libtasn1: 2.2Nüsse: 2.8.4Bitte helfen Sie. Vielen Dank.
AktualisierenGemäß dem ersten Feedback verfügt jedes SDK über eine Kopie von "libSystem.dylib" in "$ SDKROOT / usr / lib". Es gibt keine Kopie von libSystem in "$ DEVROOT / usr / lib", wobei:
$ DEVROOT = "/Developer/Platforms/iPhoneOS.platform/Developer"$ SDKROOT = "$ DEVROOT / SDKs / iPhoneOS $ VER.sdk"Die "libSystem" -Bibliotheken enthalten die normalen, nicht dekorierten Versionen jedes Symbols, enthalten jedoch nicht die "$ UNIX2003" -Varianten der Symbole. Ich vermute, dass GPG-ERROR "_POSIX_C_SOURCE", "_UNIX" oder ein anderes UNIX-Funktionstestmakro definiert und dass ein Rogue-Header, der "$ UNIX2003" an die Funktionen anfügt, wenn diese Funktionstestmakros vorhanden sind, enthalten ist. Das Entfernen von "$ DEVROOT / usr / include" aus der Liste der Include-Verzeichnisse hat keine Auswirkungen auf das Entfernen dieser Fehlermeldung.
Als letzte Möglichkeit sehe ich, dass "ld" eine Option "-alias_list" akzeptiert, mit der man eine Datei mit Einträgen wie "_fwrite _fwrite $ UNIX2003" angeben kann, um diese undefinierten Symbole zwangsweise in ihre undekorierten Varianten aufzulösen. Wenn möglich, möchte ich diese Option vermeiden, da sie unsinnig und potenziell gefährlich erscheint.