2016-07-30 5 views
2

В Fedora 21 я скомпилировал дистрибутив Frama-C Aluminium из источника после установки всех его предварительных условий. Моя версия OCaml - 4.02.3. Frama-C и графический интерфейс Frama-C работают нормально. Я пытаюсь следовать разделу 2.3 «Плагин ViewCfg» для Frama-C Plug-In Development Guide. Однако, в разделе 2.3.4, «Расширение Frama-C GUI», после того, как добавить код расширения GUI и запустить его с помощью опции «-load-сценарий», я получаю следующее сообщение:Frama-C Aluminium «Unbound module 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 = 

Я googled «несвязанный модуль gmenu», но не нашел ничего полезного. Я также никогда не сталкивался с этой ошибкой при использовании неоновых и натриевых версий Frama-C. Интересно, что если я пропущу этот раздел и следую разделу 2.3.5 «Разделение файлов и запись Makefile», я больше не получаю сообщение «Unbound module GMenu», и этот пример отлично работает.

Если бы мне пришлось угадать, когда я использую параметр «-load-script», то Frama-C (или моя версия OCaml, как бы там ни было), по-видимому, не могут найти библиотеки Gtk по какой-то причине. Но если я использую make, OCaml может найти библиотеки Gtk. Есть ли что-то неправильное в том, как я установил библиотеки Frama-C и/или Gtk? Как я могу проверить это или, что более важно, как я могу это исправить?

ответ

2

Ваша установка Frama-C, вероятно, в порядке. То, что вы наблюдаете, является ошибкой, которая была введена, когда мы перешли на OCamlfind. Мы исправим его для Framic-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: ​​неизвестный параметр ' -package «. а затем список вариантов 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