System.Load(), LoadLibrary() 可以多次加载相同动态库吗?
System.Load(), LoadLibrary() 可以多次加载相同动态库吗?
比如我有一个JNI:
public class CPPInvoker
{
public CPPInvoker(String dllFullPath)
{
System.Load(dllFullPath);
}
public native int f(int val);
}
C++实现库为C.so;
将C.so拷贝两份,分别为/tmp/1/C.so 和 /tmp/2/C.so
CPPInvoker inv1 = new CPPInvoker("/tmp/1/C.so");
CPPInvoker inv2 = new CPPInvoker("/tmp/2/C.so");
CPPInvoker inv3 = new CPPInvoker("/tmp/3/C.so");
那么inv1,inv2,inv3在调用JNI方法时,调用的C++对象是同一个?inv1一个,inv2,inv3一个?又或者是分别对应不同的C++对象?
求指导?
------解决方案-------------------- 为什么要加载多次呢?
加载多次应该是没问题的,System.Load(), LoadLibrary() 这两个方法都是返回void。
看看API:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#loadLibrary%28java.lang.String%29
------解决方案-------------------- 理论上应该不可以吧 返回是void
------解决方案-------------------- 引用: Quote: 引用:
为什么要加载多次呢?
加载多次应该是没问题的,System.Load(), LoadLibrary() 这两个方法都是返回void。
看看API:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#loadLibrary%28java.lang.String%29
API看不出来啊???
Loads the system library specified by the libname argument. The manner in which a library name is mapped to the actual system library is system dependent.
load到系统library中,一次就行了