AWS Lambda / JNI-尝试使其与嵌入式本机文件一起使用

时间:2019-05-22 16:34:30

标签: java maven jar aws-lambda java-native-interface

我的控制台应用程序(一个Java Maven项目)需要一个JAR依赖关系,该依赖关系需要本机*.so文件才能工作。

我在Linux下,找到使我的应用程序正常工作的唯一方法是使用本地LD_LIBRARY_PATH文件的绝对路径设置*.so环境变量。

我的问题:我必须将我的控制台应用程序转换为 AWS Lambda ,所以我需要嵌入原生{{1} }文件。

尝试:

  1. 我将本机*.so文件放在项目的Maven的 resources 文件夹中。但这没用。
  2. 我已经改变了策略,方法是解压缩JAR依赖项,将本机*.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不起作用。
  • 当我反编译JAR依赖项时,我看到包含-Djava.library.path的{​​{1}}块,因此将本机static文件放入类路径应该可以工作(我想),但是它没有't

问题:

  1. 我做错了吗?
  2. 您对如何使其与AWS Lambda一起使用有任何建议吗?

1 个答案:

答案 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代码中。