这是我在 WIndows 10 命令外壳上使用的命令:
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 目录中。此外,该项目确实编译(我正在使用它)。该.
目录包含所有 soot/jasmin/heros jar。
尽管如此,所有类都被认为是幻像,并且 Soot 编译中止是因为(我猜)它缺少这些类的主体。我的意思是“EvaluatorOCL”(即,仍在猜测,CompilationDeathException 的来源)是一个“幻影类”。
怎么了 ?
我应该在 Soot 的类路径中添加所有包吗?
我尝试了各种命令行表达式——直到我彻底迷路了。有人对此事有线索吗?
非常感谢。爱德华