繁体   English   中英

线程“main”中的异常 java.lang.UnsatisfiedLinkError:找不到适用于操作系统的 TensorFlow 原生库:linux,架构:x86_64

[英]Exception in thread “main” java.lang.UnsatisfiedLinkError: Cannot find TensorFlow native library for OS: linux, architecture: x86_64

我正在尝试在 Eclipse Oxygen(操作系统:Ubuntu Linux 16.x)中设置 TensorFlow Java 应用程序。 我安装了 Tensorflow 并遵循官方文档提到的 Java(Maven 项目)安装过程。 我下载了 libtensorflow-1.3.0.jar、jni 文件并包含在构建路径中。 当我执行程序时,出现以下错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot find TensorFlow native library for OS: linux, architecture: x86_64. See https://github.com/tensorflow/tensorflow/tree/master/tensorflow/java/README.md for possible solutions (such as building the library from source). Additional information on attempts to find the native library can be obtained by adding org.tensorflow.NativeLibrary.DEBUG=1 to the system properties of the JVM.
at org.tensorflow.NativeLibrary.load(NativeLibrary.java:66)
at org.tensorflow.TensorFlow.init(TensorFlow.java:36)
at org.tensorflow.TensorFlow.<clinit>(TensorFlow.java:40)
at com.tensorflow.malwaredetection.App.main(App.java:13)

应用程序.java

package com.tensorflow.malwaredetection;

import org.tensorflow.TensorFlow;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!"+ TensorFlow.version() );
    }
}

POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>TensorFlow</groupId>
  <artifactId>MalwareDetection</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>MalwareDetection</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <exec.mainClass>App</exec.mainClass>
       <!-- The sample code requires at least JDK 1.7. -->
       <!-- The maven compiler plugin defaults to a lower version -->
       <maven.compiler.source>1.8</maven.compiler.source>
       <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.tensorflow</groupId>
      <artifactId>libtensorflow</artifactId>
      <version>1.3.0</version>
    </dependency>


  </dependencies>
</project>

我厌倦了这个错误,并试图以一种老式的方式来做到这一点。 在单独的文件夹中创建 App.java 并在同一目录中包含 jar、jni 文件。 当我从命令行执行此操作时,出现不同的错误

dev@ubuntu:~/Downloads$ javac -cp libtensorflow-1.3.0.jar Test1.java
dev@ubuntu:~/Downloads$ java -cp libtensorflow-1.3.0.jar:. -Djava.library.path=./jni Test1
Error: Could not find or load main class Test1
dev@ubuntu:~/Downloads$ 

我认为您需要在 pom.xml 中包含 jni 库依赖项。

<dependency>
    <groupId>org.tensorflow</groupId>
    <artifactId>libtensorflow_jni</artifactId>
    <version>1.1.0</version>
</dependency>

当您的 pom.xml 文件中有张量流依赖项时,如下所示

<dependencies>
<dependency>
  <groupId>org.tensorflow</groupId>
  <artifactId>tensorflow</artifactId>
  <version>1.14.0</version>
</dependency>

它将下载所需的 3 个库 tensorflow-1.14.0.jar libtensorflow-1.14.0.jar libtensorflow_jni-1.14.0.jar

因此,您必须手动提取第三个 jar(libtensorflow_jni) 并获取操作系统兼容文件,例如对于 Windows,您必须复制 tensorflow_jni.dll 文件并粘贴到您的项目根目录中,以解决您的问题。

对于链接错误,您下载的 JNI 库是

  1. 与您正在运行的操作系统不兼容,
  2. 不在 PATH() 或
  3. TensorFlow bu 的概率较小,您应该能够从 TF 分类中确认。

对于第二个找不到类

  1. 您的 PATH 必须附加“。” 以便它可以在当前文件夹中从它运行的地方找到类
  2. 如果类名/包不相同,则可能性较小。

如果您可以发布课程代码将检查

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM