Java本机loadlibrary无法加载库-Linux fedora25 java8 [英] java native loadlibrary cannot load the library - Linux fedora25 java8

查看:125
本文介绍了Java本机loadlibrary无法加载库-Linux fedora25 java8的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图加载在系统上编译的动态c ++库,以便在Java中进行包装.过去我可以在Windows上执行此操作,但是在这里我很难加载库.这是代码:

I am trying to load a dynamic c++ library I compiled on my system in order to do a wrapper in java. I have been able to do this in the past on windows, but here I struggle to have the library loaded. Here is the code:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;

import java.io.File;

public interface libWrapper extends Library {

//  String path = "." + File.pathSeparator + "hiddenPath/lib/Dynamic";
//  System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + path);
//      System.setProperty("java.library.path", path + File.pathSeparator
//          + System.getProperty("java.library.path"));

libWrapper INSTANCE = (libWrapper)
        Native.loadLibrary(
                "libgtengine.so",
                libWrapper.class );

Pointer FrameCstructor(String name, long parent,
        double x, double y, double z,
        double rotX, double rotY, double rotZ,
        double vX, double vY, double vZ,
        double angVx, double angVy, double angVz,
        double accX, double accY, double accZ,
        double angAccX, double angAccY, double angAccZ,
        boolean addToFramelist);
}

我尝试用不同的方法指定库的位置,但没有成功:

I have tried to specify the location of the library with different methods with no success:

1)指定-Djava.library.path = PATHTOLIBRARY

1) specify the -Djava.library.path=PATHTOLIBRARY

2)使用System.setProperty,但这没有成功,因为我无法运行代码.我收到一个编译错误,提示它找不到函数setProperty(以及getProperty):错误:(16,35)java:预期

2) use System.setProperty, but this was of no success since I was not able to run the code. I receive a compilation error that says it could not find the function setProperty (as well as getProperty): Error:(16, 35) java: expected

3)将libgteengine.so复制到与libWrapper类相同的文件夹中.

3) copy the libgteengine.so in the same folder than the libWrapper class.

我怀疑我的图书馆的建筑结构错误吗?

I suspect that my library has the wrong architecture build?

这是我尝试使用方法1)和3)加载它时收到的错误消息

here is the error message i get when trying to load it with method 1) and 3)

java.lang.UnsatisfiedLinkError: Unable to load library 'gtengine': Native library (linux-x86-64/libgtengine.so) not found in resource path ([file:/home/ycourvoisier/Documents/Softwares/ideaIU-2017.1/idea-IU-171.3780.107/lib/idea_rt.jar, file:/home/ycourvoisier/Documents/Softwares/ideaIU-2017.1/idea-IU-171.3780.107/plugins/junit/lib/junit-rt.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/charsets.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/deploy.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/cldrdata.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/dnsns.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/jaccess.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/jfxrt.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/localedata.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/nashorn.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/sunec.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/sunjce_provider.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/sunpkcs11.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/ext/zipfs.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/javaws.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/jce.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/jfr.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/jfxswt.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/jsse.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/management-agent.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/plugin.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/resources.jar, file:/home/ycourvoisier/jdk1.8.0_121/jre/lib/rt.jar, file:/home/ycourvoisier/Documents/Development/GitLocalRepo/com-enata-java-math/target/test-classes/, file:/home/ycourvoisier/Documents/Development/GitLocalRepo/com-enata-java-math/target/classes/, file:/home/ycourvoisier/.m2/repository/org/ejml/all/0.30/all-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/ejml/core/0.30/core-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/ejml/dense64/0.30/dense64-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/ejml/denseC64/0.30/denseC64-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/ejml/equation/0.30/equation-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/ejml/simple/0.30/simple-0.30.jar, file:/home/ycourvoisier/.m2/repository/org/apache/commons/commons-csv/1.4/commons-csv-1.4.jar, file:/home/ycourvoisier/.m2/repository/org/glassfish/javax.json/1.0.4/javax.json-1.0.4.jar, file:/home/ycourvoisier/.m2/repository/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jar, file:/home/ycourvoisier/.m2/repository/org/hibernate/hibernate-jpamodelgen/5.1.4.Final/hibernate-jpamodelgen-5.1.4.Final.jar, file:/home/ycourvoisier/.m2/repository/org/jboss/logging/jboss-logging/3.3.0.Final/jboss-logging-3.3.0.Final.jar, file:/home/ycourvoisier/.m2/repository/javax/servlet/jsp/javax.servlet.jsp-api/2.2.1/javax.servlet.jsp-api-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/javax/el/el-api/2.2.1-b04/el-api-2.2.1-b04.jar, file:/home/ycourvoisier/.m2/repository/junit/junit/4.12/junit-4.12.jar, file:/home/ycourvoisier/.m2/repository/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/commons/commons-dbcp2/2.1.1/commons-dbcp2-2.1.1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/commons/commons-pool2/2.4.2/commons-pool2-2.4.2.jar, file:/home/ycourvoisier/.m2/repository/commons-logging/commons-logging/1.2/commons-logging-1.2.jar, file:/home/ycourvoisier/.m2/repository/org/postgresql/postgresql/9.4.1212/postgresql-9.4.1212.jar, file:/home/ycourvoisier/.m2/repository/org/easymock/easymock/3.4/easymock-3.4.jar, file:/home/ycourvoisier/.m2/repository/org/objenesis/objenesis/2.2/objenesis-2.2.jar, file:/home/ycourvoisier/.m2/repository/org/slf4j/slf4j-simple/1.7.22/slf4j-simple-1.7.22.jar, file:/home/ycourvoisier/.m2/repository/org/slf4j/slf4j-api/1.7.22/slf4j-api-1.7.22.jar, file:/home/ycourvoisier/.m2/repository/org/openjdk/jmh/jmh-core/1.17.4/jmh-core-1.17.4.jar, file:/home/ycourvoisier/.m2/repository/net/sf/jopt-simple/jopt-simple/4.6/jopt-simple-4.6.jar, file:/home/ycourvoisier/.m2/repository/org/apache/commons/commons-math3/3.2/commons-math3-3.2.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-server/9.4.0.RC1/jetty-server-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-http/9.4.0.RC1/jetty-http-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-io/9.4.0.RC1/jetty-io-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-jndi/9.4.0.RC1/jetty-jndi-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-util/9.4.0.RC1/jetty-util-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-maven-plugin/9.4.0.RC1/jetty-maven-plugin-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-plugin-api/3.0.3/maven-plugin-api-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-model/3.0.3/maven-model-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/sisu/sisu-inject-plexus/2.1.1/sisu-inject-plexus-2.1.1.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/sisu/sisu-inject-bean/2.1.1/sisu-inject-bean-2.1.1.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/sisu/sisu-guice/2.9.4/sisu-guice-2.9.4-no_aop.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-artifact/3.0.3/maven-artifact-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/codehaus/plexus/plexus-utils/2.0.6/plexus-utils-2.0.6.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-core/3.0.3/maven-core-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-settings/3.0.3/maven-settings-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-settings-builder/3.0.3/maven-settings-builder-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-repository-metadata/3.0.3/maven-repository-metadata-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-model-builder/3.0.3/maven-model-builder-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-aether-provider/3.0.3/maven-aether-provider-3.0.3.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/aether/aether-spi/1.11/aether-spi-1.11.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/aether/aether-impl/1.11/aether-impl-1.11.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/aether/aether-api/1.11/aether-api-1.11.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/aether/aether-util/1.11/aether-util-1.11.jar, file:/home/ycourvoisier/.m2/repository/org/codehaus/plexus/plexus-interpolation/1.14/plexus-interpolation-1.14.jar, file:/home/ycourvoisier/.m2/repository/org/codehaus/plexus/plexus-classworlds/2.4/plexus-classworlds-2.4.jar, file:/home/ycourvoisier/.m2/repository/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/plexus/plexus-sec-dispatcher/1.3/plexus-sec-dispatcher-1.3.jar, file:/home/ycourvoisier/.m2/repository/org/sonatype/plexus/plexus-cipher/1.4/plexus-cipher-1.4.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/plugin-tools/maven-plugin-tools-api/3.4/maven-plugin-tools-api-3.4.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-project/2.2.1/maven-project-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-profile/2.2.1/maven-profile-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.jar, file:/home/ycourvoisier/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-plugin-registry/2.2.1/maven-plugin-registry-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.jar, file:/home/ycourvoisier/.m2/repository/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.jar, file:/home/ycourvoisier/.m2/repository/org/apache/maven/maven-plugin-descriptor/2.2.1/maven-plugin-descriptor-2.2.1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-webapp/9.4.0.RC1/jetty-webapp-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-xml/9.4.0.RC1/jetty-xml-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-servlet/9.4.0.RC1/jetty-servlet-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-quickstart/9.4.0.RC1/jetty-quickstart-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-jaas/9.4.0.RC1/jetty-jaas-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-security/9.4.0.RC1/jetty-security-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-plus/9.4.0.RC1/jetty-plus-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-jmx/9.4.0.RC1/jetty-jmx-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/jetty-annotations/9.4.0.RC1/jetty-annotations-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar, file:/home/ycourvoisier/.m2/repository/org/ow2/asm/asm/5.1/asm-5.1.jar, file:/home/ycourvoisier/.m2/repository/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.jar, file:/home/ycourvoisier/.m2/repository/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/javax-websocket-server-impl/9.4.0.RC1/javax-websocket-server-impl-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/javax-websocket-client-impl/9.4.0.RC1/javax-websocket-client-impl-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/javax/websocket/javax.websocket-api/1.0/javax.websocket-api-1.0.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/websocket-server/9.4.0.RC1/websocket-server-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/websocket-common/9.4.0.RC1/websocket-common-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/websocket-api/9.4.0.RC1/websocket-api-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/websocket-client/9.4.0.RC1/websocket-client-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/websocket/websocket-servlet/9.4.0.RC1/websocket-servlet-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/apache-jsp/9.4.0.RC1/apache-jsp-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/toolchain/jetty-schemas/3.1/jetty-schemas-3.1.jar, file:/home/ycourvoisier/.m2/repository/org/mortbay/jasper/apache-jsp/8.5.4/apache-jsp-8.5.4.jar, file:/home/ycourvoisier/.m2/repository/org/mortbay/jasper/apache-el/8.5.4/apache-el-8.5.4.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.jar, file:/home/ycourvoisier/.m2/repository/org/eclipse/jetty/apache-jstl/9.4.0.RC1/apache-jstl-9.4.0.RC1.jar, file:/home/ycourvoisier/.m2/repository/org/apache/taglibs/taglibs-standard-spec/1.2.5/taglibs-standard-spec-1.2.5.jar, file:/home/ycourvoisier/.m2/repository/org/apache/taglibs/taglibs-standard-impl/1.2.5/taglibs-standard-impl-1.2.5.jar, file:/home/ycourvoisier/.m2/repository/javax/transaction/javax.transaction-api/1.2/javax.transaction-api-1.2.jar, file:/home/ycourvoisier/Documents/Softwares/ideaIU-2017.1/idea-IU-171.3780.107/lib/idea_rt.jar])

感谢您的时间和帮助

编辑

public interface libWrapper extends Library {

static String path = "." + File.pathSeparator + "/home/ycourvoisier/Documents/Development/GitLocalRepo/hydros-mathLibrary/HydrosMathLibraryCode/lib/Dynamic";
static {
    System.setProperty( "jna.library.path", path + File.pathSeparator
            + System.getProperty( "java.library.path" ) );
}


libWrapper INSTANCE = (libWrapper)
        Native.loadLibrary(
                "libgtengine.so",
                libWrapper.class );
}

建议使用

以便使用System的setProperty.但是Java返回字符的非法开头

EDIT2 这是应该执行相同操作的精简版本,但也不起作用.该路径是在代码中直接指定的,因此不会混淆是否提供该路径:

EDIT2 here is a condensed version that should do the same, but that doesn't work either. The path is directly specified in the code, so there is no confusion about whether it is provided:

public class Frame {

static {
    System.setProperty( "jna.library.path", "/home/NAME/Documents/Development/GitLocalRepo/com-hidden-java-math/src" + File.pathSeparator + System.getProperty( "jna.library.path" ) );
}

public interface libWrapper extends Library {

    libWrapper INSTANCE = (libWrapper)
            Native.loadLibrary(
                    "gtengine",
                    libWrapper.class );

    Pointer FrameCstructor(String name, long parent,
            double x, double y, double z,
            double rotX, double rotY, double rotZ,
            double vX, double vY, double vZ,
            double angVx, double angVy, double angVz,
            double accX, double accY, double accZ,
            double angAccX, double angAccY, double angAccZ,
            boolean addToFramelist);
}

private Pointer ptrToCFrame;

public Frame(String name, int parent,
        double x, double y, double z,
        double rotX, double rotY, double rotZ,
        double vX, double vY, double vZ,
        double angVx, double angVy, double angVz,
        double accX, double accY, double accZ,
        double angAccX, double angAccY, double angAccZ,
        boolean addToFramelist) {

    ptrToCFrame = libWrapper.INSTANCE.FrameCstructor( name, parent,
            x, y, z, rotX, rotY, rotZ,
            vX, vY, vZ, angVx, angVy, angVz,
            accX, accY, accZ, angAccX, angAccY, angAccZ,
            addToFramelist );
    }
}

推荐答案

解决库加载问题的方法是更改​​代码(这里我仍然怀疑这样做的正确方法)

The solution to the loading issue of the library was to have the code changed (here I still doubt on the right way to do this)

public class Frame {

static {
    System.loadLibrary( "gtengine" );
}

public static native Pointer FrameCstructor(String name, long parent,
        double x, double y, double z,
        double rotX, double rotY, double rotZ,
        double vX, double vY, double vZ,
        double angVx, double angVy, double angVz,
        double accX, double accY, double accZ,
        double angAccX, double angAccY, double angAccZ,
        boolean addToFramelist);

private Pointer ptrToCFrame;

public Frame(String name, int parent,
        double x, double y, double z,
        double rotX, double rotY, double rotZ,
        double vX, double vY, double vZ,
        double angVx, double angVy, double angVz,
        double accX, double accY, double accZ,
        double angAccX, double angAccY, double angAccZ,
        boolean addToFramelist) {

    System.out.println("library: " + System.getProperty( "java.library.path" ));

    ptrToCFrame = FrameCstructor( name, parent,
            x, y, z, rotX, rotY, rotZ,
            vX, vY, vZ, angVx, angVy, angVz,
            accX, accY, accZ, angAccX, angAccY, angAccZ,
            addToFramelist );
    }
}

我必须在LD_LIBRARY_PATH环境变量中指定库 libgtengine.so.3.7 的路径(而不是较短版本的 libgtengine.so ).这是在仔细阅读@mko提供的链接(在视频中)后发现的成员.

And I had to specify the path of the library libgtengine.so.3.7 (not the shorter version libgtengine.so) in the LD_LIBRARY_PATH environment variable. This was discovered after reading carefully the link (in the video) provided by @mko member.

这现在又造成了我遇到的其他困难( UnsatisfiedLinkError未定义符号:XOpenDisplay ).

This now created other difficulties (UnsatisfiedLinkError undefined symbol: XOpenDisplay) that I keep for an other moment.

谢谢

这篇关于Java本机loadlibrary无法加载库-Linux fedora25 java8的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆