在一个Java程序,我写我做一个JNI调用的DLL并在启动时加载库如下检查一个DLL库是否已经加载? (JAVA)
static
{
System.loadLibrary("LdapAuthenticator2");
}
我再实施加载同一个库的另一个阶级和我得到一个错误说图书馆已经加载,有没有办法检查图书馆是否已经在运行?
感谢,
-Pete
在一个Java程序,我写我做一个JNI调用的DLL并在启动时加载库如下检查一个DLL库是否已经加载? (JAVA)
static
{
System.loadLibrary("LdapAuthenticator2");
}
我再实施加载同一个库的另一个阶级和我得到一个错误说图书馆已经加载,有没有办法检查图书馆是否已经在运行?
感谢,
-Pete
检查我的回答这个问题
How do I get a list of JNI libraries which are loaded?
解决方案的工作,遗憾的是这个问题的海报似乎与非SUN兼容的JVM或过于严格安全管理器的问题。
链接到示例POC源代码。
什么样的错误呢?如果它是一个例外,你能抓住它吗?
另一种方法是正好一个类负责加载库。您可以加载类的静态初始化器的库部分,然后加载类==加载库。
编辑:javadocs for Runtime.loadLibrary()
(其中System.loadLibrary
电话)甚至建议静态初始化方法:
如果在一个类实现中使用本机方法,一个 标准战略是把本地 代码库中的文件(称之为 LIBFILE),然后把一个静态初始化 :
static { System.loadLibrary("LibFile"); }
类的声明中。当该类被加载并初始化时, 的本地方法 的必需本机代码 也将被加载。
的Javadoc还说:
如果这种方法被称为比同库名一次,第二次和后续调用将被忽略。
这让我更加好奇你得到的错误。
我猜他得到UnsatisfiedLinkError因为两个不同的类加载器尝试加载相同的本地库 – jitter 2009-07-16 18:52:51