8

我是Java新手,我想尝试用google or-tools解决车辆路线问题

只需尝试从这里运行 java 示例

但我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path

有一行代码加载系统库“jniortools”。但我不知道从哪里得到那个库。

我正在使用 mac osx。

有任何想法吗?

4

4 回答 4

2

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

于 2018-05-09T09:32:37.907 回答
1

自版本 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-javabuild/java/ortools-<native>(这是两个常规的 maven 项目......)

于 2020-09-03T19:23:04.057 回答
1

我们将 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
    
于 2021-02-24T13:24:46.760 回答
1

为了澄清 Rohith Rajesh 的回答,可以在“ortools-(platform)-(version).jar”文件中找到所需的 jniortools 库。对于 mac osx,它采用“libjniortools.dylib”文件的形式。

您只需要提取 jar 并通过 java 参数指向它(请参阅 Rohith Rajesh 的回答)

于 2021-03-02T22:34:00.343 回答