2015-05-18 11 views
7

Ich arbeite GnuPG Java API zum Verschlüsseln/Entschlüsseln von Dateien.
Google gegoogelt und einen Java Wrapper GnuPG for Java, Java Wrapper für GPGME(GnuPG Made Easy,C language library) gefunden.
Offizielle Website verweist auch this als Java-Wrapper.
So folgte die Anweisungen, ant eingerichtet und versucht, ant clean release
laufen zu lassen es wirft Fehler. Aber Maven Build arbeiten und JAR-Datei auch generiert.
Folgender Fehler trat auf, während ant ausgeführt wurde.GnuPG für Java-Bibliothek Ameisenbau Problem/Fehler

C:\Users\user\Desktop\MFT\gnupg-for-java-master>ant clean release 
Buildfile: C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml 

clean-native: 
    [exec] rm -f GnuPGContext.o GnuPGData.o GnuPGGenkeyResult.o GnuPGKey.o GnuPGSignature.o gpgmeutils.o *~ 
    [exec] rm -f C:\Users\user\Desktop\MFT\gnupg-for-java-master\build/gnupg-for-java.dll 
    [exec] rm -f com_freiheit_gnupg_GnuPGContext.h com_freiheit_gnupg_GnuPGData.h com_freiheit_gnupg_GnuPGGenkeyResult.h com_freiheit_gnupg_GnuPG 
Key.h com_freiheit_gnupg_GnuPGSignature.h 

clean: 
    [delete] Deleting directory C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes 

prepare: 

compile-java: 
    [mkdir] Created dir: C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes 
    [javac] C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=l 
ast; set to false for repeatable builds 
    [javac] Compiling 8 source files to C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes 

gen-jni-headers: 

prepare: 

compile-java: 
    [javac] C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:21: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=l 
ast; set to false for repeatable builds 

generate-jni-headers: 
    [exec] C:\Program Files (x86)/Java/jdk1.7.0_51/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes -jni com.freih 
eit.gnupg.GnuPGContext com.freiheit.gnupg.GnuPGData com.freiheit.gnupg.GnuPGGenkeyResult com.freiheit.gnupg.GnuPGKey com.freiheit.gnupg.GnuPGSigna 
ture 
    [exec] /bin/sh: -c: line 0: syntax error near unexpected token `(' 
    [exec] /bin/sh: -c: line 0: `C:\Program Files (x86)/Java/jdk1.7.0_51/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\c 
lasses -jni com.freiheit.gnupg.GnuPGContext com.freiheit.gnupg.GnuPGData com.freiheit.gnupg.GnuPGGenkeyResult com.freiheit.gnupg.GnuPGKey com.fre 
iheit.gnupg.GnuPGSignature' 
    [exec] make: *** [com_freiheit_gnupg_GnuPGContext.h] Error 2 

BUILD FAILED 
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:71: The following error occurred while executing this line: 
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:63: exec returned: 2 

Total time: 4 seconds 

aktualisieren

änderte ich den Java home in GNUmakefile Nun ist es anders Fehler zu werfen. Scheint c library nicht gefunden und diese API ist für Unix-System geschrieben scheint durch Lesen der Fehlermeldung. Welche C-Bibliothek fehlt?

generate-jni-headers: 
    [exec] C:\Java\jdk1.7.0_75/bin/javah -classpath C:\Users\user\Desktop\MFT\gnupg-for-java-master\build\classes -jni com.freiheit.gnupg.GnuPGConte 
xt com.freiheit.gnupg.GnuPGData com.freiheit.gnupg.GnuPGGenkeyResult com.freiheit.gnupg.GnuPGKey com.freiheit.gnupg.GnuPGSignature 

gen-jni-library: 

recompile-c-code: 
    [exec] mingw32-gcc -g -Werror -Wall -Wno-deprecated-declarations -fPIC -mms-bitfields -Wl,--add-stdcall-alias -D_REENTRANT -D_THREAD_SAFE -D_FIL 
E_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1 -I"C:\Java\jdk1.7.0_75/include" -I"C:\Java\jdk1.7.0_75/include/win32" -I"C:\Program Files (x86)/GNU/GnuPG/includ 
e" -c GnuPGContext.c 
    [exec] /bin/sh: mingw32-gcc: command not found 
    [exec] make: *** [GnuPGContext.o] Error 127 

BUILD FAILED 
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:82: The following error occurred while executing this line: 
C:\Users\user\Desktop\MFT\gnupg-for-java-master\build.xml:75: exec returned: 2 

Total time: 7 seconds 

Kann mir jemand helfen, dieses Problem zu lösen? Wo mache ich Fehler?

+0

Ant findet das 'make'-Dienstprogramm nicht. Haben Sie einen C-Compiler und eine Toolchain installiert? –

+0

Ich benutze Windows 8 und nur Java installiert. Niemals C-Compiler und Toolchain verwendet. Wie richte ich sie ein? Kannst du eine Idee geben? –

+0

Es scheint, dass alles, was Sie genau versuchen zu verwenden baut GPGME für sich. Ich kann Ihnen nicht mit Einzelheiten helfen, müsste die Anforderungen selbst nachschlagen. –

Antwort

3

Ich schrieb meine Antwort um, weil ich eine komplette Anleitung erstellen wollte.

Installieren Sie GnuPG und MinGW-Get zu einem Verzeichnis ohne Leerzeichen. Nach der Installation MinGW mit !!! GUI !!!, offener mingw-get installiert diese Komponenten:
mingw32-gcc (bitte) mingw32-libz (die DLL ist die wichtigste)

Download und Installieren Sie MSYS, das ist ein Befehlszeilen-Toolkit zum Ausführen von Befehlen wie make.

Dann setzen Sie c:\msys\1.0\bin\ (oder wo immer Sie es installiert haben) am Anfang der PATH-Variable. Starte Eclipse neu oder öffne einen neuen Cmd und es sollte funktionieren.

Im build.xml: Zeile 21:

classpath="lib/junit-4.4.jar" added.(and the junit is in the lib dir) 

Im GNUmakefile: Zeile 9:

ALL_CFLAGS := -Wall -Wno-deprecated-declarations -fPIC 

Zeile 10:

ALL_CPPFLAGS = -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -DLARGEFILE_SOURCE=1 \ 
     -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include" -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include/win32" 

Linie 21-27 :

JAVA_HOME := c:/WORK/x/gnu/jdk/jdk1.8.0_25 
    ALL_CFLAGS += -mms-bitfields -Wl,--add-stdcall-alias 
    ALL_CPPFLAGS += -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include/win32" -I"c:/WORK/x/gnu/jdk/jdk1.8.0_25/include" -I"c:/GNU/GnuPG/include" 
    ALL_LDFLAGS := -s -shared -Wl,--enable-auto-import 
    ALL_LIBS := -L"c:/GNU/GnuPG" -lgpgme-11 
    GNUPG_LIB := $(BUILD_DIR)/gnupg-for-java.dll 

Linie 63:

$(CC) $(DEBUG) $(ALL_CFLAGS) $(ALL_LDFLAGS) $^ -o "$(BUILD_DIR)/gnupg-for-java.dll" $(ALL_LIBS) 

Zusammenfassung: Dies ist für mich arbeiten und gibt das Glas und DLL-Datei in das Build-Verzeichnis. Mein Arbeitsverzeichnis war c:/WORK/x, also ersetze die Pfade wo es anders ist. Verwenden Sie nicht "Programme" irgendwo, wie Sie sehen können, musste ich alles von dort kopieren.

+0

Ich folgte den Anweisungen und 'mach' funktioniert da und wirft einen anderen Fehler und Build fehlgeschlagen. Können Sie mir helfen, dieses Problem zu lösen? Ich habe die Fehlermeldung in der Frage aktualisiert. –

+0

Ich habe meine Antwort aktualisiert! – gaRos

+0

Sorry für das spät, ich habe meine Frage aktualisiert. Bitte überprüfen Sie es einmal. Der Java-Standortpfad versucht immer noch, den alten Pfad zu übernehmen. Irgendeine Idee, wo es schief geht? –

3

Die Fehlermeldung besagt, dass mingw32-gcc in /bin/sh nicht gefunden werden kann.

Sie sollten zunächst mingw installieren und es Ihrem Pfad hinzufügen. Überprüfen Sie, ob mingw32-gcc über die Befehlszeile gestartet werden kann.

Laufen Sie das Ameisen-Skript von Cygwin? Es ist ein bisschen seltsam, dass es sich bezieht /bin/sh. Vielleicht solltest du versuchen, es von Cygwin auszuführen. Oder überprüfen Sie die Datei build.xml, um zu sehen, wie mingw32-gcc aufgerufen wird. Es muss ein Recompile-C-Code-Ziel sein.