我目前正在使用 Alloy Analyzer API 来构建程序,并获得了一些特殊的行为。具体来说,如果我打开一个文件并解析它(使用 CompUtil.parseEverything),然后创建一个新命令并在解析的文件上调用 TranslateAlloyToKodkod.execute_command,并使用带有 UNSAT 核心的 MiniSat 新创建的命令,它运行良好。但是,稍后在执行中,我的程序解析第二个输入文件(也使用 CompUtil.parseEverything),获取另一个世界,发出一个新命令,然后我尝试再次调用 TranslateAlloyToKodkod.execute_command,它会引发以下错误:
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?