使用RNI接口调用C程序,经常会报 以下两种异常:
UnsatisfiedLinkError: no jtokyocabinet in java.library.path
和
wrong ELF class: ELFCLASS64
UnsatisfiedLinkError: no jtokyocabinet in java.library.path 的解决方案
解决方案如下:
在应用容器的启动脚本中,将C程序所需类库.SO文件所在路径配置到 CLASSPATH ,LD_LIBRARY 及 java.library.path中,如下所述:
CLASSPATH="/usr/java/jdk/jre/lib/rt.jar:/usr/java/jdk/lib/tools.jar:/usr/local/lib/"
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"
export CLASSPATH LD_LIBRARY_PATH
JAVA_OPTS="-server"
JAVA_OPTS="$JAVA_OPTS -Xms64m -Xmx128m"
JAVA_OPTS="$JAVA_OPTS -D64 -Djava.library.path=/usr/local/lib/"
如果还是不行,就手动将上面的命令在SHELL中执行一遍。
wrong ELF class: ELFCLASS64的解决方案
原因是jVM是32位的版本,要装64位版本才行
32位java -version出来的结果如下:
java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Server VM (build 10.0-b19, mixed mode)
而64位如下:
java version "1.6.0_12"
Java(TM) SE Runtime Environment (build 1.6.0_12-b04)
Java HotSpot(TM) 64-Bit Server VM (build 11.2-b01, mixed mode)