我目前使用的合金分析儀API構建的程序,並獲得一些特殊的行爲。特別是,如果我打開一個文件,分析它(使用CompUtil.parseEverything),然後作出一個新的命令,並呼籲TranslateAlloyToKodkod.execute_command在解析文件,並使用與MINISAT核心UNSAT新創建的命令,它運行良好。但是,後來在執行時,我的程序會解析第二個輸入文件(也使用CompUtil.parseEverything),獲取另一個世界,創建一個新命令,然後嘗試再次調用TranslateAlloyToKodkod.execute_command,它會引發以下錯誤:合金API導致java.lang.UnsatisfiedLinkError中
ERROR: class edu.mit.csail.sdg.alloy4.ErrorFatal: The required JNI library cannot be found: java.lang.UnsatisfiedLinkError: no minisatproverx5 in java.library.path edu.mit.csail.sdg.alloy4compiler.translator.TranslateAlloyToKodkod.execute_command(TranslateAlloyToKodkod.java:390)
有沒有人有任何想法爲什麼這是第二次拋出,但不是第一次?
總之,我有類似下面的內容:
Module someWorld = CompUtil.parseEverything_fromFile(rep, null, "someFile.als");
//For the following, "sig" is a sig in someWorld.getAllReachableSigs();
Command command = sig.not();
A4Options options = new A4Options();
options.solver = A4Options.SatSolver.MiniSatProverJNI;
A4Solution ans =
TranslateAlloyToKodkod.execute_command(rep, someWorld, command, options);
//No thrown error
Module someOtherWorld = CompUtil.parseEverything_fromFile(rep, null, "someOtherFile.als");
//For the following, "sig" is a sig in someOtherWorld.getAllReachableSigs();
Command commandTwo = sig.not();
A4Solution ansTwo =
TranslateAlloyToKodkod.execute_command(rep, someOtherWorld, commandTwo, options);
//Thrown error above. Why?
完美;日食方法奏效!謝謝。對我來說,我仍然有一個奇怪的例子,那就是我沒有一個例外,但是隻要它有效,我就很高興。謝謝。 – 2012-08-13 06:59:04
可能是第一個模型(「someFile。als「)是平凡(不可)滿足的,在這種情況下,Kodkod不需要運行底層的SAT求解器,所以不會發生錯誤。 – 2012-08-13 19:11:30