0

这是我在 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/libOCLRuler/src. 输出目录包含在 soot 目录中。此外,该项目确实编译(我正在使用它)。该.目录包含所有 soot/jasmin/heros jar。

尽管如此,所有类都被认为是幻像,并且 Soot 编译中止是因为(我猜)它缺少这些类的主体。我的意思是“EvaluatorOCL”(即,仍在猜测,CompilationDeathException 的来源)是一个“幻影类”。

怎么了 ?

我应该在 Soot 的类路径中添加所有包吗?

我尝试了各种命令行表达式——直到我彻底迷路了。有人对此事有线索吗?

非常感谢。爱德华

4

2 回答 2

0

改变了-pp -process-dir R:\...\OCLRuler\src\ 论据-pp -process-dir R:\...\OCLRuler\

而且似乎工作正常……幻影还在四处闲逛,但输出文件夹中有结果文件!

[编辑:]哎呀,这将成为一个新问题......输出文件是......空!正如我所说,仍然有关于幻像的警告,并且为所有文件(java和类)生成输出

为什么他们是空的?[/编辑]

于 2017-09-26T18:28:33.943 回答
0

这很可能是 Soot 的源代码前端的一个问题,它现在已经严重过时了。我建议将 .java 文件编译为 .class,然后将它们提供给 Soot。

于 2017-09-27T14:39:56.447 回答