Google OR-Tools: Could not run the java example, java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
Google OR-Tools: Could not run the java example, java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
我是 java 的新手,我想尝试 google or-tools for vehicle routing problem
只需尝试 运行 java 来自 here
的示例
但是我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
有一行代码加载系统库"jniortools"。但我不知道从哪里获得该库。
我正在使用 mac osx。
有什么想法吗?
OR-Tools 是一个 C++ 库,在 Java 中使用 SWIG(执行 JNI 调用等...)进行包装。 IE。这是一个原生库,不是 "pure" java 库...
因此,要在 java 中使用 ortools,您必须调整 java.library.path
例如当使用来自源代码的 ortools 和 运行 来自 root_dir
的程序时:
make third_party
make java
java -Djava.library.path=lib -cp objs:lib/com.google.ortools.jar:lib/protobuf.jar Program
注意:ortools依赖于protobuf.jar(由ortools makefile third_party目标规则编译)
文档:https://developers.google.com/optimization/introduction/run_programs#running-the-java-example
自发布 v7.8(或使用 master 分支)后,您可以使用基于 CMake 的构建生成 Maven 包。
git clone --depth=1 --single-branch -b master git@github.com:google/or-tools.git
cd or-tools
cmake -S. -Bbuild -DBUILD_JAVA=ON
cmake --build build -v
然后你将在 build/java/ortools-java
和 build/java/ortools-<native>
中拥有 maven 包(这是两个常规的 maven 项目...)
我们使用 Gradle 进行构建,Linux OS。这些是我们为解决此问题所遵循的步骤
在应用程序的主程序中添加这行代码class。
System.loadLibrary("jniortools");
下载 linux 的 OR Tools jar 文件并将它们保存在项目的任意文件夹中。 (在这里,它是 <project_folder>/libs
)。并将这些行添加到您的 build.gradle 文件
compile files('libs/ortools-java-8.1.8487.jar')
compile files('libs/ortools-linux-x86-64-8.1.8487.jar')
compile group: 'net.java.dev.jna', name: 'jna', version: '5.6.0'
此外,我们还解压了 jar ortools-linux-x86-64-8.1.8487.jar 在同一文件夹 ( libs )
jar -xvf ortools-linux-x86-64-8.1.8487.jar
虽然 运行 应用程序(将其构建为 jar 文件后),我们提到了 .so 文件所在的本机库路径
java -Djava.library.path="/home/user/<project_name>/libs/linux-x86-64/" -jar /home/user/<project_name>/build/libs/<project_name>.jar
为了澄清 Rohith Rajesh 的回答,可以在“ortools-(platform)-(version).jar”文件中找到所需的 jniortools 库。对于 mac osx,它以“libjniortools.dylib”文件的形式存在。
您只需要提取 jar 并通过 java 个参数指向它(参见 Rohith Rajesh 的回答)
我是 java 的新手,我想尝试 google or-tools for vehicle routing problem
只需尝试 运行 java 来自 here
的示例但是我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
有一行代码加载系统库"jniortools"。但我不知道从哪里获得该库。
我正在使用 mac osx。
有什么想法吗?
OR-Tools 是一个 C++ 库,在 Java 中使用 SWIG(执行 JNI 调用等...)进行包装。 IE。这是一个原生库,不是 "pure" java 库...
因此,要在 java 中使用 ortools,您必须调整 java.library.path
例如当使用来自源代码的 ortools 和 运行 来自 root_dir
的程序时:
make third_party
make java
java -Djava.library.path=lib -cp objs:lib/com.google.ortools.jar:lib/protobuf.jar Program
注意:ortools依赖于protobuf.jar(由ortools makefile third_party目标规则编译)
文档:https://developers.google.com/optimization/introduction/run_programs#running-the-java-example
自发布 v7.8(或使用 master 分支)后,您可以使用基于 CMake 的构建生成 Maven 包。
git clone --depth=1 --single-branch -b master git@github.com:google/or-tools.git
cd or-tools
cmake -S. -Bbuild -DBUILD_JAVA=ON
cmake --build build -v
然后你将在 build/java/ortools-java
和 build/java/ortools-<native>
中拥有 maven 包(这是两个常规的 maven 项目...)
我们使用 Gradle 进行构建,Linux OS。这些是我们为解决此问题所遵循的步骤
在应用程序的主程序中添加这行代码class。
System.loadLibrary("jniortools");
下载 linux 的 OR Tools jar 文件并将它们保存在项目的任意文件夹中。 (在这里,它是
<project_folder>/libs
)。并将这些行添加到您的 build.gradle 文件compile files('libs/ortools-java-8.1.8487.jar') compile files('libs/ortools-linux-x86-64-8.1.8487.jar') compile group: 'net.java.dev.jna', name: 'jna', version: '5.6.0'
此外,我们还解压了 jar ortools-linux-x86-64-8.1.8487.jar 在同一文件夹 ( libs )
jar -xvf ortools-linux-x86-64-8.1.8487.jar
虽然 运行 应用程序(将其构建为 jar 文件后),我们提到了 .so 文件所在的本机库路径
java -Djava.library.path="/home/user/<project_name>/libs/linux-x86-64/" -jar /home/user/<project_name>/build/libs/<project_name>.jar
为了澄清 Rohith Rajesh 的回答,可以在“ortools-(platform)-(version).jar”文件中找到所需的 jniortools 库。对于 mac osx,它以“libjniortools.dylib”文件的形式存在。
您只需要提取 jar 并通过 java 个参数指向它(参见 Rohith Rajesh 的回答)