2016-07-30 27 views
2

在Fedora 21上,我在安裝完所有必備軟件之後,從源代碼編譯了Frama-C鋁合金發行版。我的OCaml版本是4.02.3。 Frama-C和Frama-C GUI工作正常。我正在嘗試關注Frama-C Plug-In Development Guide的第2.3節「ViewCfg插件」。然而,在第2.3.4節「擴展郵資-C GUI」後,我添加了GUI擴展代碼,並使用「-load腳本」選項運行它,我得到以下信息:Frama-C鋁「未綁定模塊GMenu」

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 = 

我GOOGLE了「未綁定的模塊gmenu」,但沒有發現任何有用的東西。在使用Frama-C的Neon和鈉版本時,我也從未遇到過這個錯誤。有趣的是,如果我跳過這一節並按照第2.3.5節「分割文件和編寫一個Makefile」,我不再獲得「Unbound module GMenu」消息,並且該示例正常工作。

如果我不得不猜測,當我使用「-load-script」選項時,Frama-C(或我版本的OCaml,無論情況如何)顯然無法找到Gtk庫。但如果我使用make,OCaml 可以找到Gtk庫。我安裝Frama-C和/或Gtk庫的方式有沒有可能出錯?我如何檢查這個,或者更重要的是,我該如何解決這個問題?

回答

2

您的Frama-C安裝可能沒問題。您觀察到的是在轉換到OCamlfind時引入的錯誤。我們將修復Frama-C Silicium。

如果你真的想用一個腳本,這裏是你需要申請郵資-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() ; 
+0

現在我得到「ocamlopt.opt:未知的選項' -包'。」接着是一個ocamlopt選項列表。任何想法現在有什麼不對? – gsp

+0

這很奇怪:不應該調用ocamlopt.opt。相反,應該使用ocamlfind ocaml。是ocamlfind安裝並用於編譯Frama-C。 (它應該,但從來不知道。) – byako

+0

Ocamlfind已安裝。我只是使用'./configure && make && sudo make install'來編譯和安裝Frama-C,但不幸的是我沒有保存輸出,所以我不知道ocamlfind是否被用來編譯Frama-C。我仍然有config.log。這會有幫助嗎? – gsp