2016-05-13 34 views
0

Ich sehe eine Menge Fehler, mehr als 170, beim Erstellen meiner j2objc integrierten Projekt."Referenced from" -Fehler beim Erstellen mit j2objc

ich denke, die Java-Bibliothek j2re richtig gelegen wird, und der Verknüpfungsschritt sagt

-Llib/j2objcDist/lib -Llib/j2objcDist/lib/macosx -F/Users/username/Library/Developer/Xcode/DerivedData/MyApp-dkbwtvvwogkqknfpbozsmzhgrcei/Build/Products/Debug-iphonesimulator -Flib/j2objcDist/frameworks

Errors seen when building with j2objc

Viele der Wege, die ich sehe den vollen Benutzerpfad umfassen, sondern auf die lib/j2objcDist/lib-Pfade.

Meine Bibliothek Suchpfade sind ${PROJECT_DIR}/lib/j2objcDist/lib/

Meine Header-Suchpfade sind ${PROJECT_DIR}/lib/j2objcDist/include ${DERIVED_FILES_DIR} ${PROJECT_DIR}/lib/j2objcDist/frameworks/JRE.framework/Headers ${PROJECT_DIR}/lib/j2objcDist/lib

Mein Rahmen Suchpfade ${PROJECT_DIR}/lib/j2objcDist/frameworks

ich die Einstellungen in der Demo-Anwendung auf die zur Verfügung stehende repliziert haben j2objc.org Website meines Wissens zu sein.

Irgendwelche Vorschläge auf, was man versucht oder wo man sucht, um dieses zu beheben, würde groß sein.

Antwort

0

Es sieht so aus, als ob Sie es richtig eingerichtet haben, wo Sie die Bibliotheken finden können, aber Sie haben dem Linker nicht gesagt, dass er Bibliotheken enthalten soll. Setzen Sie in anderen Linker-Flags entweder "-ljre_emul" (oder "-l jre_emul"), um den Linker anzuweisen, die JRE-Emulationsbibliothek einzuschließen.

Das wird alle Fehler beheben, die Sie aufgelistet haben, aber wenn Sie andere Bibliotheken verwenden, dann benötigen sie separate -l Flags. Wenn Sie beispielsweise Google Guava-Klassen verwenden, muss auch "-lguava" angegeben werden.

Der Linker findet Bibliotheken, indem er jedes Argument -l in einen Bibliotheksnamen ("lib" + arg "+" .a "oder libjre_emul.a in diesem Fall) umwandelt. Es prüft dann jeden -L Pfad Um diese Datei zu finden, sollte die Bibliothek mit "ls $ {PROJECT_DIR} /lib/j2objcDist/lib/libjre_emul.a" aufgeführt werden (natürlich unter Verwendung des aktuellen Projektverzeichnisses).

+0

Ich hatte dies in anderen Linker Flags hinzugefügt. Der einzige Schritt, den ich vermisste, war, jremul.a in den Abschnitt Link Binary With Libraries hinzuzufügen. –

0

Wenn es eine -ljre_emul gibt Flag und ein gültiger -L-Pfad zu dieser Bibliothek, dann wird das Problem wahrscheinlich einen Übersetzer aus einer J2ObjC-Version und Bibliotheken aus einer anderen verwenden. J2ObjC ist ein Compiler und seine generierten Dateien müssen als transiente Build-Artefakte behandelt werden. keine permanenten Quelldateien Wenn Ihr Projekt übersetzte .m- und .h-Dateien speichert, müssen alle Java-Quellen bei jeder neuen Verteilung verwendet werden mit neuen Übersetzungen aktualisiert werden.