我正在尝试为frama-c开发一个插件。
我确实构建了具有多个文件的应用程序,然后创建了makefile
引用我需要的所有文件。
我可以使用make
然后使用make install
并执行插件。当我在函数中调用ocamlyices
库中的函数时出现我的问题...
我仍然能够进行make和make install,当我尝试执行时,我得到以下错误:
[kernel] warning: cannot load plug-in 'name' (incompatible with Fluorine-20130601).
[kernel] user error: option `<name>' is unknown.
use `frama-c -help' for more information.
[kernel] Frama-C aborted: invalid user input.
因此,当我将调用添加到ocamlyices
函数时,它表示不兼容。我在哪里缺少任何选项/配置吗?
感谢您的帮助。
最终解决方案如下所示:
FRAMAC_SHARE := $(shell frama-c.byte -print-path)
FRAMAC_LIBDIR := $(shell frama-c.byte -print-libpath)
PLUGIN_NAME = Fact
# All needed files
PLUGIN_CMO = ../base/basic_types concolic_search run_fact ../lib/lib
PLUGIN_DOCFLAGS = -I ../base -I ../lib -I $(YICES) -I /usr/lib/ocaml/batteries -I ../instrumentation
PLUGIN_BFLAGS = -I ../base -I ../lib -I $(YICES) -I ../instrumentation
PLUGIN_OFLAGS = -I ../base -I ../lib -I $(YICES) -I ../instrumentation
PLUGIN_EXTRA_BYTE = $(YICES)/ocamlyices.cma
PLUGIN_EXTRA_OPT = $(YICES)/ocamlyices.cmxa
include $(FRAMAC_SHARE)/Makefile.dynamic
变量$(YICES)定义为
export YICES="/usr/local/lib/ocaml/3.12.1/ocamlyices"
答案 0 :(得分:1)
正如Anne所提到的,如果您的插件使用的是Frama-C本身尚未包含的外部库,则需要比基本插件更多的步骤,尤其是设置PLUGIN_EXTRA_BYTE
和PLUGIN_EXTRA_OPT
到您希望链接到插件的外部库。可能还需要使用PLUGIN_LINK_BFLAGS
和PLUGIN_LINK_OFLAGS
调整传递给链接器的标志,但这很大程度上取决于ocamlyices
本身。有关可用于自定义插件编译的变量的更多信息,请参见Frama-C's development guide的第5.3.3节。