2017-04-04 6 views
0

Rpi2の基本CコードをJNIでコンパイルしようとしています。私はGCCとで直接やろうとしていました。私は多くの異なるスイッチを試してみましたが、何も作業していないと私はまだ取得しています:Raspberry Pi 2のJNIでCをコンパイルする(ELFクラスが間違っている)

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

を私は今少しこだわっていますので、ヒントのいずれかの種類感謝されます。

+0

64ビットの共有オブジェクトが作成されているようです。 32ビットJVMを実行している場合は、32ビットの共有オブジェクトが必要です。 'gcc -m32 ...'は32ビット共有オブジェクトを生成します。 –

答えて

0

ここからサンプルを使用して試すことができます:

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/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! 
関連する問題