在我编写的Java程序中,我对dll进行jni调用,并在启动时加载库,如下所示
static
{
System.loadLibrary("LdapAuthenticator2");
}
然后我实现了另一个加载相同库的类,并且收到一个错误,说明该库已经加载了,有没有办法检查库是否已经在运行?
谢谢,
-Pete
答案 0 :(得分:8)
检查我对这个问题的回答
How do I get a list of JNI libraries which are loaded?
解决方案有效,不幸的是,问题的海报似乎与非SUN兼容的JVM或限制性太强的SecurityManager有问题。
链接到示例POC源代码。
答案 1 :(得分:0)
出现什么样的错误?如果这是一个例外,你能抓住它吗?
另一种方法是使一个类负责加载库。你可以加载类的静态初始化器的库部分,然后加载class ==加载库。
编辑:javadocs for Runtime.loadLibrary()
(System.loadLibrary
次调用)甚至建议采用静态初始化方法:
如果要在类的实现中使用本机方法,a 标准策略是把原生 库文件中的代码(称之为 LibFile)然后放一个静态的 初始化:
static { System.loadLibrary("LibFile"); }
在类声明中。当类加载并初始化时, 必要的本机代码 本机方法的实现 然后也会加载。
javadocs还说:
如果使用相同的库名称多次调用此方法,则忽略第二次和后续调用。
让我对你得到的错误更加好奇。