【问题标题】:Compiling C with JNI for Raspberry Pi 2 (wrong ELF class)使用 JNI 为 Raspberry Pi 2 编译 C(错误的 ELF 类)
【发布时间】:2017-08-30 08:11:51
【问题描述】:

我正在尝试用JNIRpi2 编译基本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


【解决方案1】:

您可以尝试使用此处的示例:

http://jnicookbook.owsiak.org/recipe-No-001/

我可以在以下位置运行代码而没有任何问题:

cat /proc/cpuinfo
processor   : 0
model name  : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS    : 2.00
Features    : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part    : 0xb76
CPU revision    : 7

Hardware    : BCM2708
Revision    : 0010
Serial      : 00000000ee4a3dc2

只需执行以下操作:

git clone https://github.com/mkowsiak/jnicookbook.git
cd jnicookbook/recipes/recipeNo001/
export JAVA_HOME=$WHEREVER_YOUR_JAVA_IS
make test

应该给你结果:

make test
/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/bin/java -Djava.library.path=:./lib -cp target recipeNo001.HelloWorld
library: :./lib
Hello world!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多