В настоящее время я использую Alloy Analyzer API для создания программы и получаю какое-то странное поведение. В частности, если я открою файл и проанализирую его (используя CompUtil.parseEverything), затем создам новую команду и вызову TranslateAlloyToKodkod.execute_command для проанализированного файла и вновь созданной команды с использованием MiniSat с ядром UNSAT, она будет работать нормально. Однако позже при выполнении моя программа анализирует второй входной файл (тоже с помощью 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?