Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JNI:编译64位本机库时出现问题_Java_C_Gcc_Java Native Interface_Native - Fatal编程技术网

Java JNI:编译64位本机库时出现问题

Java JNI:编译64位本机库时出现问题,java,c,gcc,java-native-interface,native,Java,C,Gcc,Java Native Interface,Native,我在Windows上编译了一个本机DLL文件(64位),带有GCC标志-c和-o Name.DLL 当我执行System.load(“FullPahere”)时,我得到以下错误: java.lang.UnsatisfiedLinkError: RenderControl.dll: %1 is not a valid Win32 application 如果我重新编译向C源代码添加一个空的main()方法并删除-C标志,那么它将失败,并出现一个不满意的链接错误,该错误表示它无法在64位机器上加载

我在Windows上编译了一个本机DLL文件(64位),带有GCC标志-c和-o Name.DLL

当我执行System.load(“FullPahere”)时,我得到以下错误:

java.lang.UnsatisfiedLinkError: RenderControl.dll: %1 is not a valid Win32 application
如果我重新编译向C源代码添加一个空的main()方法并删除-C标志,那么它将失败,并出现一个不满意的链接错误,该错误表示它无法在64位机器上加载32位DLL

为什么Java调用没有主方法的DLL无效?这不是破坏了DLL文件和JNI的全部功能吗

更新

我解决了主要问题。此GCC调用设置工作:

gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at -I "C:\Program Files\Java\jdk1.6.0_32\include" -I "C:\Program Files\Java\jdk1.6.0_32\include\win32" -shared *.c -o lib.dll
但是,我仍然需要解决JVM体系结构问题

在哪里可以找到能够编译64位代码的MinGW安装?我的标准MinGW安装似乎只执行32位


如果我能做到这一点,我如何决定用Java加载哪个库?是否有显示JVM arch的系统属性(不是操作系统arch)?

如果使用MinGW32编译器,则无法生成64位代码。这很可能是故意的。我很快查找到的其他人的类似问题似乎表明,您正在尝试将32位本机二进制文件与64位java结合使用

尝试使用编译,看看这是否可以解决问题

还有一种可能性是,您的库根本不在库路径中,即使您提供了
系统,也找不到它。请加载
完整路径,在这种情况下,您应该确保您的DLL位于本机库的正确位置。

签出,下载TDM-GCC,它可以在Windows上轻松安装上述MinGW-w64。您可以使用以下代码在installint TDM-GCC之后生成64位dll

"C:\MinGW64\bin\gcc.exe" -m64 -c -I"C:\Program Files\Java\jdk1.6.0_26\include" -I"C:\Program Files\Java\jdk1.6.0_26\include\win32" HelloWorld.c 

是“-m64”使其成为64位。这是从与HelloWorld.c代码源文件相同的目录运行的。这将在与run相同的目录中生成HelloWorld.o C代码对象文件。

我正在查看MinGW-w64,我确实下载了它,但我不知道如何安装它?(我在zip文件中下载了Windows 64位,不幸的是没有安装程序exe…)哦,该死,他们似乎只有linux二进制文件。你知道为什么没有main()时DLL会被标记为无效吗?我有linux Mint双启动。我可以在那里试试哈哈。如果有一个main,我怀疑它在这个场景中是否被当作DLL处理;UnsatifiedLinkError表示找不到请求的库或方法。