java - 如何从 JAR 文件的“lib”子目录加载 DLL?
问题描述
我已经包含(使用 Gradle)一些带有本机库 (DLL) 的 JAR,这些 JAR 包含lib
在 DLL 文件上方的子目录中:
很遗憾,
System.loadLibrary('JCudaRuntime-0.9.2-windows-x86_64');
原因
java.lang.UnsatisfiedLinkError: no JCudaRuntime-0.9.2-windows-x86_64 in java.library.path
如何解决这个问题?
是否可以指定子目录loadLibrary
?原生库应该放在哪里更好?只是在 JAR 文件的根目录中?
lib
我可以教 Gradle在 JAR中寻找本地人吗?
解决方案
普通libs
目录用于jar
和aar
库。
x86_64
大会会去src/main/jniLibs/x86_64
static {
try {
System.loadLibrary("JCudaDriver-0.9.2-windows-x86_64");
System.loadLibrary("JCudaRuntime-0.9.2-windows-x86_64");
} catch (UnsatisfiedLinkError e) {
Log.e(LOG_TAG, e.getMessage());
}
}
一个可以/也可以改变路径:
sourceSets {
main {
jniLibs.srcDir "src/main/jniLibs"
jni.srcDirs = "src/main/cpp"
}
}
问题在于,x86_64
仍然需要特定于平台的子目录。.dll
从 中提取.jar
并将它们放到项目jniLibs
目录中可能是最简单的 - 因为虽然它们在jar
一个lib
目录中,但它们可能无法在预期的地方找到;这不必要地使事情复杂化。
推荐阅读
- pandas - 带有指向networkx有向图的链接列表的数据框
- vb.net - 找不到程序集“CrystalDecisions.CrystalReports.Engine,
- c# - 找不到 linq 查询输出的正确返回类型
- node.js - 无法将文件和表单数据一起从角度发送到节点 js 服务器
- typescript - @types/passport version 1.0.5 生成新错误:Type Authenticator does not meet the constraint IncomingMessage
- react-native - key_exchange_identification:读取:安装@react-native-community/masked-view 时由对等方重置连接
- reactjs - 道具更改时反应组件不更新或重新安装
- c# - 是否可以在运行时通过脚本添加轻 cookie?
- sql - 根据特定条件从重复行返回值
- python - 如何在Python中获取多边形内网格点的坐标?