2017-09-26 4 views
0

hier ist der Befehl, den ich auf 10 Kommando-Shell WIndows verwenden:RUSS - CompilationDeathException (und ein Phantom Armee)

java 
-cp .\soot-2.5.0.jar soot.Main 
-cp ".;R:\...\OCLRuler\lib;C:\...\jdk1.8.0_144\bin" 
-pp -process-dir R:\...\OCLRuler\src\ 
-src-prec java 
-d R:\...\test\soot 
-allow-phantom-refs 
-main-class OCLRuler 

Wenn ich es ausführen, bekomme ich die folgende Ausgabe:

Soot started on Tue Sep 26 13:28:32 EDT 2017 
Warning: java.dyn.InvokeDynamic is a phantom class! 
Warning: Main is a phantom class! 
Warning: MainMulti is a phantom class! 
Warning: oclruler.a_test.MainRawTesting is a phantom class! 
... all of them (100+ lines)... 
Warning: oclruler.utils.ToolBox is a phantom class! 
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found. 
OCLRuler.java: Class "oclruler.genetics.EvaluatorOCL" not found. 
Exception in thread "main" soot.CompilationDeathException: Could not compile 
     at soot.javaToJimple.JavaToJimple.compile(JavaToJimple.java:104) 
     at soot.javaToJimple.InitialResolver.formAst(InitialResolver.java:117) 
     at soot.JavaClassSource.resolve(JavaClassSource.java:54) 
     at soot.SootResolver.bringToHierarchy(SootResolver.java:215) 
     at soot.SootResolver.bringToSignatures(SootResolver.java:239) 
     at soot.SootResolver.processResolveWorklist(SootResolver.java:154) 
     at soot.SootResolver.resolveClass(SootResolver.java:124) 
     at soot.Scene.loadClass(Scene.java:448) 
     at soot.Scene.loadClassAndSupport(Scene.java:433) 
     at soot.Scene.loadNecessaryClasses(Scene.java:1076) 
     at soot.Main.run(Main.java:167) 
     at soot.Main.main(Main.java:141) 

Alle Bibliotheken, die im OCLRUler-Projekt verwendet werden, sind in OCLRUler/lib und allen Quellen in OCLRuler/src enthalten. Das Ausgabeverzeichnis ist nicht im Soot-Verzeichnis enthalten. Außerdem kompiliert das Projekt (ich arbeite daran und damit). Das Verzeichnis . enthält alle Russ/Jasmin/Heros Gläser.

Dennoch werden alle Klassen als Phantome betrachtet, und Soot Compilation Abordnungen, weil (ich denke) es fehlt Körper aus diesen Klassen. Ich meine, dass "EvaluatorOCL" (d. H. Immer noch raten, die Quelle der CompilationDeathException) ist eine "Phantom-Klasse".

Was ist los?

Soll ich alle und alle Pakete in Soots Klassenpfad hinzufügen?

Ich habe alle möglichen Befehlszeilenausdrücke ausprobiert - bis ich profund verloren bin. Hat jemand eine Ahnung davon?

Vielen Dank. Edouard

Antwort

0

Changed die -pp -process-dir R:\...\OCLRuler\src\ Argument für -pp -process-dir R:\...\OCLRuler\

und es scheint zu funktionieren ... Die Phantome sind noch Flanieren, aber es gibt Ergebnisdateien im Ausgabeordner!

[edit:] Oups, das ist gona eine neue Frage geworden ... Die Ausgangsdateien sind ... LEER !!! Wie gesagt, es gibt immer noch Warnungen über Phantome und Ausgaben werden für alle Dateien generiert (Java und Klasse gleichermaßen)

Warum sind sie leer ??

0

Dies könnte ein Problem mit Soots Quellcode-Frontend sein, das mittlerweile stark veraltet ist. Ich würde empfehlen, die .java-Dateien in .class zu kompilieren und dann an Soot zu übergeben.

+0

Dank Eric. Aber mit dem bin-Ordner (mit Klassen-Dateien), zusammen mit der "-src-prec-Klasse" bekomme ich eine 'RuntTimeException: Konnte CLassfile nicht laden: oclluler.genetics.Oracle' Welches ist eine vorhandene und kompilierte Datei –

+0

Das Projekt, das ich anstrebe Analysieren ist in Java 8. –

Verwandte Themen