【问题标题】:GnuPG for Java library ant build issue/bugGnuPG for Java 库蚂蚁构建问题/错误
【发布时间】:2015-05-18 09:10:45
【问题描述】:

我正在 GnuPG Java API 工作以加密/解密文件。
谷歌搜索并找到了一个 Java Wrapper GnuPG for JavaGPGME(GnuPG Made Easy,C language library) 的 Java wrapper。
官网也将this称为Java包装器。
所以按照说明,设置ant并尝试运行ant clean release
它正在抛出错误。 但是maven构建工作和jar文件也生成了。
运行ant 时出现以下错误。

 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

更新

我在GNUmakefile 中更改了Java home,现在它抛出了不同的错误。似乎没有找到c library,并且这个 API 是为 Unix 系统编写的,似乎是通过阅读错误消息。缺少什么 C 库?

    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

谁能帮我解决这个问题? 我在哪里犯错了?

【问题讨论】:

  • Ant 没有找到 make 实用程序。您是否安装了 C 编译器和工具链?
  • 我使用的是 Windows 8 并且只安装了 java。从未使用过 C 编译器和工具链。如何设置它们?能给个思路吗?
  • 无论您尝试使用什么,似乎都可以自行构建 GPGME。无法帮助您了解具体情况,必须自己查找要求。
  • 感谢您的赏金,您是否设法解决了问题,我认为这只是另一个路径错误。真的很遗憾所有路径都被硬编码到makefile中......
  • 编辑在我检查之前就被拒绝了,无论如何,脚本现在工作了吗?

标签: java ant cryptography gnupg


【解决方案1】:

我重写了我的答案,因为我想创建一个完整的指南。

将 GnuPG 和 MinGW-Get 安装到没有空格的目录。 使用 !!!GUI!!! 安装 MinGW 后,打开 mingw-get,安装这些组件:
mingw32-gcc (检查所有) mingw32-libz(dll最重要)

Download 并安装 MSYS,这是一个用于运行 make 等命令的命令行工具包。

然后将c:\msys\1.0\bin\(或您安装它的任何位置)放在 PATH 变量的开头。重启eclipse或者打开一个新的cmd,应该就可以了。

在 build.xml 中: 第 21 行:

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

在 GNUmake 文件中: 第 9 行:

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

第 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"

第 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

第 63 行:

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

总结:这对我有用,并将 jar 和 dll 文件输出到构建目录。我的工作目录是 c:/WORK/x 所以替换它不同的路径。不要在任何地方使用“程序文件”,您可以看到我必须从那里复制所有内容。

【讨论】:

  • 我按照说明操作,make 在那里工作并抛出了一些其他错误,构建失败。你能帮我解决这个问题吗?我更新了问题中的错误消息。
  • 对不起,我更新了我的问题。请检查一次。 Java 位置路径仍在尝试从旧路径中提取。知道哪里出错了吗?
  • 我刚刚意识到,makefile 没有使用真正的 java_home。在 jni/GNUmakefile 中,将第 26 行更改为正确的值。我希望这能解决它。
  • 我按照相同的说明进行操作,这次缺少 c 库。首先,我按照您的指导安装了所有 MSYS 库。但现在它还在叫喊。有什么帮助解决这个问题吗?
  • 但是mingw也安装了,对吧?我下载了 MinGW get,我不得不调用 bin/mingw-get install gcc 来获取 gcc。您是否按照自述文件 txt 执行了每一步?
【解决方案2】:

错误消息告诉它在/bin/sh 中找不到mingw32-gcc

您应该首先安装mingw 并将其添加到您的路径中。检查 mingw32-gcc 是否可以从命令行启动。

你是从 cygwin 运行 ant 脚本吗?它指的是/bin/sh,这有点奇怪。也许您应该尝试从 cygwin 运行它。或者查看 build.xml 文件,看看 mingw32-gcc 是如何被调用的。它必须是 recompile-c-code 目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多