我如何使用为 Frama-C 的插件编写的模块?
How can i use the modules written for Frama-C' s plugin?
Build 是为了构建 PDG 而开发的模块。
我编写了一个使用此模块 Build 的脚本,但是当我尝试使用以下命令启动此脚本时:
frama-c -load-script test.ml
我收到错误:Unbound module Build。
有没有办法访问这个模块。我的项目中需要它。
Build 是一个示例,但还有其他模块,如 Sets,它提供了读取 PDG 的功能。然而,其他模块如 PdgTypes 不会出错。如果有人能帮助我...
在我的文件中 test.ml,
让计算 = Build.compute_pdg
....
let()=Db.Main.extendmain
你不能那样做。 -load-script
仅适用于在 Frama-C 之外没有任何依赖项(或 Frama-C 自己的依赖项,例如 OCamlgraph)的脚本。正如 Anne 所建议的,如果您的代码包含在多个文件中,您应该将其编写为插件。
对于一个简单的插件,你基本上只需要在你的OCaml代码之外写一个简短的Makefile
。 Makefile
将主要包含插件的源文件列表和一些附加信息(例如插件的名称),如 the developer's manual 中所述,其中包含一个小教程。
或者,如果您只有两个文件,应该可以将它们手动 assemble 到一个模块中,然后由 Frama-C 加载。假设你有 build.ml
和 test.ml
,你可以这样做(使用 Sodium
版本)
ocamlopt -I $(frama-c-config -print-libpath) -c build.ml
ocamlopt -I $(frama-c-config -print-libpath) -c test.ml
ocamlopt -shared -o script.cmxs build.cmx test.cmx
frama-c -load-module script.cmxs [other options] [files]
您引用的模块 Build
和 Sets
不被视为 Frama-C 的 public 用户界面的一部分。相反,它们是插件内部的 PDG
。您可以从用户脚本访问的 PDG
的模块是目录 src/pdgTypes
中的模块:PdgIndex
、PdgMarks
和 PdgTypes
。然后,API 的第二部分在 Db.Pdg
中可用(Db
在 src/kernel/db.ml
中)。特别是模块 Sets
的大部分功能都在那里重新导出。
对于 Build
中可用的函数,它们被认为级别太低而无法导出。如果您确实需要访问它,则必须复制目录 src/pdg
并将其转换为插件(使用新名称,以避免冲突)。
Build 是为了构建 PDG 而开发的模块。 我编写了一个使用此模块 Build 的脚本,但是当我尝试使用以下命令启动此脚本时:
frama-c -load-script test.ml
我收到错误:Unbound module Build。 有没有办法访问这个模块。我的项目中需要它。 Build 是一个示例,但还有其他模块,如 Sets,它提供了读取 PDG 的功能。然而,其他模块如 PdgTypes 不会出错。如果有人能帮助我...
在我的文件中 test.ml, 让计算 = Build.compute_pdg ....
let()=Db.Main.extendmain
你不能那样做。 -load-script
仅适用于在 Frama-C 之外没有任何依赖项(或 Frama-C 自己的依赖项,例如 OCamlgraph)的脚本。正如 Anne 所建议的,如果您的代码包含在多个文件中,您应该将其编写为插件。
对于一个简单的插件,你基本上只需要在你的OCaml代码之外写一个简短的Makefile
。 Makefile
将主要包含插件的源文件列表和一些附加信息(例如插件的名称),如 the developer's manual 中所述,其中包含一个小教程。
或者,如果您只有两个文件,应该可以将它们手动 assemble 到一个模块中,然后由 Frama-C 加载。假设你有 build.ml
和 test.ml
,你可以这样做(使用 Sodium
版本)
ocamlopt -I $(frama-c-config -print-libpath) -c build.ml
ocamlopt -I $(frama-c-config -print-libpath) -c test.ml
ocamlopt -shared -o script.cmxs build.cmx test.cmx
frama-c -load-module script.cmxs [other options] [files]
您引用的模块 Build
和 Sets
不被视为 Frama-C 的 public 用户界面的一部分。相反,它们是插件内部的 PDG
。您可以从用户脚本访问的 PDG
的模块是目录 src/pdgTypes
中的模块:PdgIndex
、PdgMarks
和 PdgTypes
。然后,API 的第二部分在 Db.Pdg
中可用(Db
在 src/kernel/db.ml
中)。特别是模块 Sets
的大部分功能都在那里重新导出。
对于 Build
中可用的函数,它们被认为级别太低而无法导出。如果您确实需要访问它,则必须复制目录 src/pdg
并将其转换为插件(使用新名称,以避免冲突)。