TL;DR:我最近升级到了Z3 Java的更新版本,现在我无法加载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 )中读取这里文件时,我们可以看到,实际上失败的是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的负载成功,但没有任何效果。
非常感谢你的帮助。
发布于 2015-11-05 12:48:22
对于错误报告,请使用我们的问题跟踪器这里。但是,在提交错误之前,请确保libz3.dylib和java安装都是64位的,否则这种行为会频繁发生,并且不会产生任何有用的错误消息,看起来加载会被忽略。
发布于 2017-01-12 10:42:12
您可以通过修补libz3java.so来找到它对同一位置的依赖关系,从而解决这个问题:
patchelf --set-rpath '.:$ORIGIN' libz3java.so如果您对背景感兴趣,可以在http://enroute.osgi.org/appnotes/native-libraries.html阅读
如何安装修补程序在这里:https://installion.co.uk/ubuntu/vivid/universe/p/patchelf/install/index.html
https://stackoverflow.com/questions/33541226
复制相似问题