我是Java新手,我想尝试用google or-tools解决车辆路线问题
只需尝试从这里运行 java 示例
但我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
有一行代码加载系统库“jniortools”。但我不知道从哪里得到那个库。
我正在使用 mac osx。
有任何想法吗?
我是Java新手,我想尝试用google or-tools解决车辆路线问题
只需尝试从这里运行 java 示例
但我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path
有一行代码加载系统库“jniortools”。但我不知道从哪里得到那个库。
我正在使用 mac osx。
有任何想法吗?
OR-Tools 是一个 C++ 库,它使用 SWIG(执行 JNI 调用等)在 Java 中进行了包装。即这是一个本机库而不是“纯”java lib...
因此,要在 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第三方目标规则编译)
文档: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
然后你会有 maven 包build/java/ortools-java
和build/java/ortools-<native>
(这是两个常规的 maven 项目......)
我们将 Gradle 用于构建和 Linux 操作系统。这些是我们为解决此问题而采取的步骤
在应用程序的主类中添加这行代码。
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 的回答)