【发布时间】:2017-08-30 08:11:51
【问题描述】:
我正在尝试用JNI 为Rpi2 编译基本C 代码。我试图用GCC 直接在rpi 中进行操作。我尝试了许多不同的开关,但没有任何效果,我仍然得到:
Java HotSpot(TM) Client VM warning: You have loaded library /tmp/libTestLibraryWrapper7702387558318276188.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
Exception in thread "main" java.lang.UnsatisfiedLinkError:
/tmp/libTestLibraryWrapper7702387558318276188.so:
/tmp/libTestLibraryWrapper7702387558318276188.so:
wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)
我正在使用:
gcc -shared -march=armv7-a -mfpu=neon-vfpv4 -mfloat-abi=hard -c -g -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/ -I/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/include/linux -fPIC -MMD -MP -MF "build/Debug/GNU-Linux/testJava.o.d" -o build/Debug/GNU-Linux/testJava.o testJava.c
我现在有点卡住了,所以任何形式的提示都将不胜感激。
【问题讨论】:
-
您似乎创建了一个 64 位共享对象。如果您运行的是 32 位 JVM,则需要一个 32 位共享对象。
gcc -m32 ...将生成一个 32 位共享对象。
标签: java c gcc raspberry-pi java-native-interface