Wie Baue Intensivstation, so kann ich es verwenden in einer iPhone-app?

Wie kann ich die Konfiguration und den Aufbau der Intensivstation, so kann ich einen link auf meine iPhone-app?

Pflege ich eine iPhone app, die verwendet eine SQLite-Datenbank. Jetzt habe ich zum kompilieren mit ICU-Unterstützung aktiviert (SQLITE_ENABLE_ICU). Ich habe die neueste ICU Quelle.

Den configure flags, die ich verwende:

./configure --target=arm-apple-darwin --enable-static --disable-shared

Danach läuft gnumake ohne Fehler läuft.

Dann füge ich die Bibliotheken zu meinem Xcode Projekt. Aber wenn ich Baue, bekomme ich 50 Zeilen dieses:

Undefined symbols:
  "_uregex_close_48", referenced from:
      _icuRegexpDelete in libsqlite3-cerod.a(sqlite3_cerod.o)
  "_ubrk_current_48", referenced from:
      _icuNext in libsqlite3-cerod.a(sqlite3_cerod.o)
  "_ucol_strcoll_48", referenced from:
      _icuCollationColl in libsqlite3-cerod.a(sqlite3_cerod.o)
  "_u_isspace_48", referenced from:
      _icuRegexpFunc in libsqlite3-cerod.a(sqlite3_cerod.o)
  "_utf8_countTrailBytes_48", referenced from:
      _utf8_countTrailBytes_48$non_lazy_ptr in libsqlite3-cerod.a(sqlite3_cerod.o)
     (maybe you meant: _utf8_countTrailBytes_48$non_lazy_ptr)
  "_ubrk_next_48", referenced from:
      _icuNext in libsqlite3-cerod.a(sqlite3_cerod.o)

Irgendeine Idee, was ich falsch mache?

Bearbeitet, um hinzufügen:

Wenn ich die Bibliotheken des Projektes (mit der rechten Maustaste auf den Namen des Projekts, Fügen Sie dann Vorhandene...), bekomme ich diese:

ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicudata.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicui18n.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicuio.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicule.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libiculx.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicutu.a, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /Users/eric.grunin/dev/iOS/icu/source/lib/libicuuc.a, file was built for unsupported file format which is not the architecture being linked (i386)

Das ist, warum ich glaube, ich Baue die Bibliothek falsch. Es ist, als ob es sagt:

  • Es können nicht sagen, was die Architektur der .die Dateien sind gebaut für
  • libsqlite3-cerod.einer ist gebaut für i386

Verstehe ich nicht, entweder die Möglichkeit, aber ich bin neu in der iPhone-Entwicklung.

Bearbeitet, um hinzufügen

Versuchte ich @Sergio Moura Lösung, und habe die genannten Fehler in meinem Kommentar.

Versuchte ich @sergio-Lösung, die gebaut. Aber ich bin noch immer der äquivalente Fehler, beginnend mit:

ld: warning: in /Users/eric.grunin/dev/iOS/icu/iosbuild/lib/libicudata.a, file was built for unsupported file format which is not the architecture being linked (i386)

Könnte ich sagen, Xcode, die falsche Sache? Ich bin der rechten Maustaste auf den Projektnamen, wählen Sie dann "Hinzufügen->Vorhandene Datei", und wählen Sie die sechs oder sieben .a Dateien aus /icu/iosbuild/lib. Ist das der richtige Prozess?

Hinweis:

@sergio empfiehlt configure --host=arm-apple-darwin, @Sergio Moura ist mit configure --target=arm-apple-darwin. Weder einen Unterschied gemacht, leider.

Edit #2

Targeting-Gerät aus (anstelle der emulator) alle Problem gelöst, aber eine der link-Fehler! Hier ist, was übrig bleibt:

Undefined symbols for architecture armv6:
  "___sync_synchronize", referenced from:
      _ucol_initUCA_48 in libicui18n.a(ucol_res.ao)
      udata_getHashTable()      in libicuuc.a(udata.ao)
      _umtx_init_48 in libicuuc.a(umutex.ao)
      _initCache in libicuuc.a(uresbund.ao)
      icu_48::hasService()       in libicui18n.a(coll.ao)
      _ucol_initInverseUCA_48 in libicui18n.a(ucol_bld.ao)
      icu_48::locale_set_default_internal(char const*)in libicuuc.a(locid.ao)
      ...
ld: symbol(s) not found for architecture armv6

Vorausgegangen war eine Kaskade von diesen Warnungen:

ld: warning: CPU_SUBTYPE_ARM_ALL subtype is deprecated: /Users/eric.grunin/dev/iOS/icu/iosbuild/lib/libicuuc.a(resbund.ao)
ld: warning: CPU_SUBTYPE_ARM_ALL subtype is deprecated: /Users/eric.grunin/dev/iOS/icu/iosbuild/lib/libicuuc.a(ustrfmt.ao)

Edit #3

@Stephen R. Loomis, die Anregung, die ich ändern #define U_HAVE_GCC_ATOMICS aus 1 zu 0 (in platform.h) kein Unterschied gemacht, leider. Ich habe auch gemerkt, dass die Letzte Zeile des Fehlers (not found for architecture arm6) nicht bedeuten, es würde für arm7 war es nur ein fyi, dass dies war eine cross-kompilieren. Wenn ich ein arm7 bauen, scheiterte es mit den gleichen Meldungen. Ach.

Edit #4

Erfolg!

Inhaltsangabe: @sergio build flags im wesentlichen korrekt waren. Ich Hinzugefügt -DU_HAVE_GCC_ATOMICS=0, um die ios-build ist CFLAGS. Das einzige, was ich getan hatte, falsch war, nicht ahnend, dass ich brauchte, um cross-kompilieren der Bibliothek zu erstellen, ein Gerät zu bauen.

Ich habe nicht versucht, Sie zu wiederholen dies für den simulator, aber das ist außerhalb des Bereichs meiner Frage.

Besonderen Dank an Steven R. Loomis für pitching, und Sergio Moura für immer die Dinge ins Rollen.

  • Sind Sie verknüpfen in der Intensivstation statische Bibliothek?
  • Eric, keine Probleme mit Apple auf diese Lösung?
  • Keine Probleme mit Apple, wir lieferten im Dezember ohne Zwischenfälle.
Schreibe einen Kommentar