我有一个需要使用本机库的应用程序:libfoo.so
我的代码如下:
访问器.java:
public class Accessor {
static {
String path = "/usr/lib/libfoo.so";
System.load(path);
}
...
}
当我在独立的 tomcat 服务器中部署 war 文件时,这工作得非常好。
问题是当我尝试运行嵌入式 tomcat 服务器时运行:
grails run-app
我收到 UnsatisfiedLinkError:
Caused by UnsatisfiedLinkError: com.foo.bar.GFS_MALJNI.new_Accessor__SWIG_0(Ljava/lang/String;I)J
->> 39 | <init> in com.foo.bar.Accessor
有趣的是,如果我改变我的BuildConfig.groovy
file to fork 模式,它也可以工作。
BuildConfig.groovy:
grails.project.fork = [
run: [maxMemory:1024, minMemory:64, debug:false, maxPerm:256]
]
我不想在 fork 模式下运行它。
我注意到正在使用两个不同的类加载器。
在非分叉模式下,使用此类加载器:java.net.URLClassLoader
在分叉模式下,使用了此类加载器:groovy.lang.GroovyClassLoader
本机库在分叉模式下可以正常工作,因此我需要想出一个技巧来在非分叉模式下使用 GroovyClassLoader 加载库。
这就是 JDK Source 中 System.load 的定义方式:
系统.java:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)