我正在尝试使用Solaris 10下的JNI和JDK 1.6运行一些hello world应用程序。我已经从Oracle安装了JDK,1.6.0_37,我的hello world应用程序的每次执行都失败了:
# java -cp "libhelloworld.jar:." -Djava.library.path=. HelloWorld
ld.so.1: java: fatal: Java_java_util_jar_JarFile_getMetaInfEntryNames: can't find symbol
我尝试过不同的JDK,认为这是一些分发问题。我使用JDK 1.6.0_23
和1.7.0_10
获得了相同的缺失符号错误。
我对JDK附带的所有* .so库中的所有符号进行了快速grep,发现此符号在jre/i386/libzip.so
中定义。然后我用LD_PRELOAD="${JAVA_HOME}/jre/i386/libzip.so" LD_LIBRARY_PATH="..."
运行了java,这次出现了分段错误。我需要提一下,我已经在Windows 7和Ubuntu 12.10下测试了这个hello world应用程序,它没有问题。
可能这个问题严格限制在Solaris + JDK tandem上。由于我不熟悉Java运行时,我没有其他想法如何调试此问题。任何提示?