2015-11-05 2 views
2

TL; Я недавно обновился до более новой версии Java API Z3, и теперь я не могу загрузить libz3java.dylib, потому что зависимость libz3.dylib игнорируется.Z3 Java API не обнаруживает libz3.dylib

Я использую Z3 version 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) 

Библиотека находится в правильном пути, хотя. При чтении файла Native.java в com.microsoft.z3.jar (с автогенерированным 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)

Большое спасибо за вашу помощь.

ответ

0

Для отчетов об ошибках, пожалуйста, используйте наш трекер here. Прежде чем отправлять ошибку, убедитесь, что ваш libz3.dylib и ваша установка java являются 64-разрядными, в противном случае такое поведение происходит часто и не дает никаких полезных сообщений об ошибках, это будет выглядеть так, что загрузка игнорируется.

+0

Выполнено: https://github.com/Z3Prover/z3/issues/294 – Eipifi

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