【发布时间】:2011-10-05 09:44:33
【问题描述】:
我在 AIX 6.1 和 SLES 11 上遇到了一个特殊问题。我正在尝试使用System.loadLibrary() 调用在Java 中加载so 文件。以下是示例程序:
public class jniTest
{
public static void main(String[] args)
{
try
{
System.loadLibrary("libSample.so");
System.out.println("Loaded!!!");
}
catch(UnsatisfiedLinkError e)
{
System.out.println("unsatisfiedlinkerror");
}
}
当我用 Java 1.5 编译这段代码时,它可以正常工作。但是当我用 Java 1.6 编译它时,它会显示UnsatisfiedLinkError。我不明白我怎么可能得到这个错误。我的跑步方式是:
javac jniTest.java
java -Djava.library.path=. jniTest
so 文件位于我运行代码的当前目录中。
在此之前,我尝试过的事情:
给出绝对路径 - 不起作用
使用
Runtime.getRuntime().loadLibrary()- 无效
知道我做错了什么吗?
【问题讨论】:
-
当你用 1.5 编译它但用 1.6 运行它时会发生什么?
-
您是否查看了 UnsatisfiedLinkError 的消息?它应该给出一些关于出了什么问题的提示。也许该库已找到,但 Java 6 无法加载。
-
SLES下
ldd libSample.so的结果是什么?我猜 AIX 中没有 ldd 。一个可能的原因是 libSample.so 依赖于 JSE 1.5 库。 -
dump -Tv libSample.so 将显示其依赖项和搜索路径。
-
gxx_personality 对 gcc/g++ 东西的尖叫。你的共享库是用 gcc 构建的吗?
标签: java java-native-interface aix