【发布时间】:2017-05-23 12:59:07
【问题描述】:
我在具有 Maven 依赖项的 Java Web 应用程序中使用 GDAL 库 java 作为依赖项:
<dependency>
<groupId>org.gdal</groupId>
<artifactId>gdal</artifactId>
<version>1.11.1</version>
</dependency>
它包含一个 jar 文件并在 C++ 中运行本机代码,我必须从 Centos 中的软件包安装它。所有这些共享库都安装在
ls -l /usr/lib/java/gdal/
total 1380
-rwxr-xr-x 3 root root 23288 Feb 14 2016 libgdalconstjni.so
-rwxr-xr-x 3 root root 23288 Feb 14 2016 libgdalconstjni.so.1
-rwxr-xr-x 3 root root 23288 Feb 14 2016 libgdalconstjni.so.1.18.4
-rwxr-xr-x 3 root root 226696 Feb 14 2016 libgdaljni.so
-rwxr-xr-x 3 root root 226696 Feb 14 2016 libgdaljni.so.1
-rwxr-xr-x 3 root root 226696 Feb 14 2016 libgdaljni.so.1.18.4
-rwxr-xr-x 3 root root 136760 Feb 14 2016 libogrjni.so
-rwxr-xr-x 3 root root 136760 Feb 14 2016 libogrjni.so.1
-rwxr-xr-x 3 root root 136760 Feb 14 2016 libogrjni.so.1.18.4
-rwxr-xr-x 3 root root 73816 Feb 14 2016 libosrjni.so
-rwxr-xr-x 3 root root 73816 Feb 14 2016 libosrjni.so.1
-rwxr-xr-x 3 root root 73816 Feb 14 2016 libosrjni.so.1.18.4
但是,Web 应用程序无法链接,因为它在链接库时遇到问题,尽管我可以从 Java 的类加载器中看到:
System.out.println(System.getProperty("java.library.path"));
/opt/jdk1.8.0_25/jre/lib/amd64:/opt/jdk1.8.0_25/jre/lib/i386::/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
其中包含 /usr/lib 文件夹。
当我调用GDAL API时GDAL java的错误(如果我不调用GDAL的方法没有错误,所以其他方法仍然有效,Web应用程序可以正常运行)是:
Caused by: java.lang.UnsatisfiedLinkError: org.gdal.osr.osrJNI.new_SpatialReference__SWIG_1()J
at org.gdal.osr.osrJNI.new_SpatialReference__SWIG_1(Native Method) ~[gdal-1.11.1.jar:na]
at org.gdal.osr.SpatialReference.<init>(SpatialReference.java:117) ~[gdal-1.11.1.jar:na]
我不知道如何解决这个问题,试图找到很多资源但没有帮助,因为我想将它部署为 Tomcat 服务器中的 Web 应用程序。在带有 JVM 选项的 NetBeans IDE 中设置时,我可以让它工作
-Djava.library.path="/usr/lib/java/gdal/"
但我知道这不是 Web 应用程序可以运行的。
【问题讨论】:
-
如果我尝试手动加载共享对象: System.load("/usr/lib/java/gdal/libgdalconstjni.so");它不接受从头开始加载 原因:java.lang.UnsatisfiedLinkError: Native Library /usr/lib/java/gdal/libogrjni.so 已经在另一个类加载器中加载
标签: java c++ maven shared-libraries native