日期:2014-05-18  浏览次数:21144 次

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++对象?

求指导?
LoadLibrary() 多次加载

------解决方案--------------------
为什么要加载多次呢?
加载多次应该是没问题的,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中,一次就行了