在Fedora 21上,我在安装了所有先决条件后,从源代码编译了Frama-C Aluminium发行版。我的OCaml版本是4.02.3。 Frama-C和Frama-C GUI工作正常。我试图遵循Frama-C Plug-In Development Guide的第2.3节“ViewCfg插件”。但是,在第2.3.4节“扩展Frama-C GUI”中,在添加GUI扩展代码并使用“-load-script”选项运行它之后,我收到以下消息:
File "cfg_print.ml", line 87, characters 19-43:
Error: Unbound module GMenu
[kernel] user error: compilation of 'cfg_print.ml' failed
第86-87行:
let cfg_selector
(popup_factory:GMenu.menu GMenu.factory) main_ui ~button:_ localizable =
我用谷歌搜索“未绑定的模块gmenu”但没有找到任何有用的东西。在使用Frama-C的Neon和Sodium版本时,我也从未遇到过这个错误。有趣的是,如果我跳过该部分并按照第2.3.5节“分割文件和编写Makefile”,我不再获得“Unbound module GMenu”消息,并且该示例工作正常。
如果我不得不猜测,当我使用“-load-script”选项时,Frama-C(或我的OCaml版本,无论情况如何)显然由于某种原因找不到Gtk库。但是如果我使用make,OCaml 可以找到Gtk库。我安装Frama-C和/或Gtk库的方式有什么问题吗?我该如何检查,或者更重要的是,我该如何解决这个问题?
答案 0 :(得分:2)
您的Frama-C安装可能没问题。您观察到的是我们转换到OCamlfind时引入的错误。我们将为Frama-C Silicium修复它。
如果你真的想使用脚本,这里是你需要应用于Frama-C源代码的补丁:
--- a/src/kernel_services/plugin_entry_points/dynamic.ml
+++ b/src/kernel_services/plugin_entry_points/dynamic.ml
@@ -236,7 +236,7 @@ let load_script base =
else
Format.fprintf fmt "%s -c" Config.ocamlc ;
Format.fprintf fmt " -w Ly -warn-error A -I %s" Config.libdir ;
- if !Config.is_gui then Format.pp_print_string fmt " -I +lablgtk" ;
+ if !Config.is_gui then Format.pp_print_string fmt " -package lablgtk2" ;
List.iter (fun p -> Format.fprintf fmt " -I %s" p) !load_path ;
Format.fprintf fmt " %s.ml" base ;
Format.pp_print_flush fmt () ;