這裏是我的窗10命令shell中使用的命令:SOOT - CompilationDeathException(和幻象軍隊)
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
當我執行它,我得到以下的輸出:
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)
所有OCLRUler項目中使用的庫包含在OCLRUler/lib
和OCLRuler/src
中的所有源中。輸出目錄不是包含在煙塵目錄中的。此外,該項目確實編譯(我正在和它一起工作)。 .
目錄包含所有soot/jasmin/heros罐。
儘管如此,所有的類都被認爲是幻影,並且菸灰編譯也很有幫助,因爲(我猜)它缺少這些類的實體。我的意思是「EvaluatorOCL」(即仍然猜測,CompilationDeathException的來源)是一個「Phantom class」。
怎麼了?
我應該在Soot的classpath中添加所有的軟件包嗎?
我試過各種命令行表達式 - 直到我徹底失去了。任何人都有關於此事的線索?
非常感謝。 愛德華
謝謝埃裏克。但是,使用bin文件夾(包含類文件)和'-src-prec class',我得到一個'RuntTimeException:無法加載CLassfile:oclruler.genetics.Oracle'這是一個現有的和編譯的文件 –
我的項目旨在分析是在Java 8中。 –