Z3 Java API 无法检测到 libz3.dylib

问题描述 投票:0回答:3

TL;DR:我最近升级到了较新版本的 Z3 Java API,现在我无法加载 libz3java.dylib,因为 libz3.dylib 依赖项被忽略了。

我正在使用Z3版本4.4.1。编译项目并将 libz3java.dylib 放入

java.library.path
后,我收到以下错误消息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libz3java in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at com.microsoft.z3.Native.<clinit>(Native.java:14)
at com.microsoft.z3.Global.ToggleWarningMessages(Global.java:86)

图书馆的路径是正确的。当读取 com.microsoft.z3.jar 中的

Native.java
文件(自动生成的here)时,我们可以看到实际上是
System.loadLibrary("z3java");
调用失败了。

所以我尝试手动加载库:

public static void main(String[] args) {
    System.load("/tmp/z3/build/libz3java.dylib");
}

我得到的结果是:

Exception in thread "main" java.lang.UnsatisfiedLinkError: /private/tmp/z3/build/libz3java.dylib:
  dlopen(/private/tmp/z3/build/libz3java.dylib, 1): 
    Library not loaded: libz3.dylib
Referenced from: /private/tmp/z3/build/libz3java.dylib
Reason: image not found

该错误表明需要先加载libz3.dylib。所以我尝试手动加载它。

public static void main(String[] args) {
    System.load("/tmp/z3/build/libz3.dylib");
    System.load("/tmp/z3/build/libz3java.dylib");
}

出乎意料的是,它产生了完全相同的错误。 libz3.dylib加载成功,但没有任何效果

  • Z3:4.4.1
  • Java版本:1.8.0_25-b17
  • 操作系统:OSX 10.11.1(El Capitan)

非常感谢您的帮助。

java z3 dylib
3个回答
0
投票

有关错误报告,请使用我们的问题跟踪器此处。不过,在提交错误之前,请确保您的 libz3.dylib 和 java 安装都是 64 位的,否则这种行为会经常发生,并且不会产生任何有用的错误消息,看起来加载被忽略了。


0
投票

您可以通过修补 libz3java.so 来解决该问题,以找到其对同一位置的依赖关系:

patchelf --set-rpath '.:$ORIGIN' libz3java.so

如果您对背景感兴趣,可以阅读http://enroute.osgi.org/appnotes/native-libraries.html

如何安装 patchelf 在这里:https://installion.co.uk/ubuntu/vivid/universe/p/patchelf/install/index.html


0
投票

两种方法取决于您的配置:

  1. 在 Eclipse 中:运行方式 -> 运行配置 -> 参数选项卡 -> 然后在 VM 参数内,输入以下内容:

    -Djava.library.path=/path/to/libz3.so/and/libz3java.so/files>

  2. 使用cmd时,运行如下:

    java -Djava.library.path =“/路径/到/目录/包含/libz3java.so”...

注:
对于 Windows:扩展名为“.dll”。
对于 Ubuntu:扩展名为“.so”。
对于 Mac:扩展名为“.dylib”。

libz3 和 libz3java 文件的扩展。

© www.soinside.com 2019 - 2024. All rights reserved.