7 java java-native-interface intellij-idea gradle
也许这里有人可以帮助我。我有一个 Java 项目,我在其中使用 Gradle 并在 IntelliJ 中处理整个事情。(规格如下)
在我的项目中,我使用 JNI 并编写自己的 C++ 库(.so 文件),将其放入项目的目录中,例如./native/build/lib/main/debug/libnative.so
.
现在,当在 IntelliJ 中正常运行我的程序时,我希望虚拟机将我的库的路径添加.so
到java.library.path
并相应地使用它。目前,我必须通过转到addEdit Configurations
并在Modify Options > Add VM Options
add下单独为每个主类执行此操作-Djava.library.path=...../native/build/lib/main/debug
。但不知何故,必须可以为 gradle 中的所有类进行全局设置,或者不能?
我知道您可以添加gradle.build
java.library.path 进行测试,如下所示
test {
systemProperty 'java.library.path','path/to/directory'
}
Run Code Online (Sandbox Code Playgroud)
但我不需要这个来进行测试,而是在单击 IntelliJ 中的绿色箭头时正常运行/启动类中的主函数。我已经尝试将其添加到所有任务中,如下所示
compileJava {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
processResources {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
classes {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
jar {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
startScripts {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
installDist {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
build {
"-Djava.library.path=${System.getProperty('java.library.path')}:${project(':native').buildDir}/lib/main/debug"
}
Run Code Online (Sandbox Code Playgroud)
但没有成功。注意,只有在test
'systemProperty'中才能使用。由于在其他任务中会抛出“无签名方法异常”。当我尝试启动程序时,我得到了Exception in thread "main" java.lang.UnsatisfiedLinkError: no native in java.library.path: [/usr/java/packages/lib, /usr/lib64, /lib64, /lib, /usr/lib]
。
我在这里简单地使用以下类:
public class A {
public static native void print0();
static {
System.loadLibrary("native");
}
public static void main(String[] args) {
print0();
}
}
Run Code Online (Sandbox Code Playgroud)
是的,当我单独设置时它会-Djava.library.path...
起作用Run Configuration
环境:
小智 2
我只是改变了我的方法,现在正在运行时在定义本机函数的类中加载我的本机库
static {
System.load('absolute Path to .so file')
}
Run Code Online (Sandbox Code Playgroud)
奇迹般有效。
归档时间: |
|
查看次数: |
4339 次 |
最近记录: |