使用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)
本文解决使用RNI接口调用C程序时出现的 UnsatisfiedLinkError 和 wrongELFclass 错误。针对 UnsatisfiedLinkError 提供了配置 CLASSPATH 和 LD_LIBRARY_PATH 的方法;对于 wrongELFclass 错误,建议使用与 JVM 匹配的 64 位版本。
43

被折叠的 条评论
为什么被折叠?



