我的控制台应用程序(一个Java Maven项目)需要一个JAR依赖关系,该依赖关系需要本机*.so
文件才能工作。
我在Linux下,找到使我的应用程序正常工作的唯一方法是使用本地LD_LIBRARY_PATH
文件的绝对路径设置*.so
环境变量。
我的问题:我必须将我的控制台应用程序转换为 AWS Lambda ,所以我需要嵌入原生{{1} }文件。
尝试:
*.so
文件放在项目的Maven的 resources 文件夹中。但这没用。*.so
文件放在根中,然后使用*.so
实用程序重新创建JAR依赖项(内部体系结构可以)。但这也不起作用:jar
NB:
Exception in thread "main" java.lang.UnsatisfiedLinkError: com.filepool.natives.FPLibraryNative.setLastError(I)V
at ...
与导出的-Djava.library.path
环境变量类似,但是LD_LIBRARY_PATH
不起作用。-Djava.library.path
的{{1}}块,因此将本机static
文件放入类路径应该可以工作(我想),但是它没有't 问题:
答案 0 :(得分:0)
每当您离开JVM时,java.library.path
就会迷失方向。您这里的选择很少。
您可以使用
代替链接-L/path -lsome_lib
-Wl,-rpath,/some/fixed/location -L/some/fixed/location -lsome_lib
另一个选择是在Java代码中使用该库的显式位置。您可以使用System.loadLibrary
并指定库的确切位置,而不使用System.load
。
在这里看看:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo031,在这里我展示了如何从JAR文件中提取库并将其加载到Java代码中。