Gcc 编译E-ACSL FRAMA-C时出错

Gcc 编译E-ACSL FRAMA-C时出错,gcc,frama-c,acsl,Gcc,Frama C,Acsl,我是Frama-C框架的新手,我正在尝试用C程序进行一些合同测试。我打算为此使用E-ACSL插件,我尝试了一个测试程序来看看它是如何工作的,但我得到了一些编译错误。这是我的密码: #include <stdio.h> #include <stdlib.h> int main(void) { int x = 0; /*@ assert x == 1;*/ /*@ assert x == 0;*/ return 0; } 最后,我尝试使用和标志来编译它(第13

我是Frama-C框架的新手,我正在尝试用C程序进行一些合同测试。我打算为此使用E-ACSL插件,我尝试了一个测试程序来看看它是如何工作的,但我得到了一些编译错误。这是我的密码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int x = 0;
  /*@ assert x == 1;*/
  /*@ assert x == 0;*/
  return 0;
}
最后,我尝试使用和标志来编译它(第13页),但我得到了以下错误(和警告):

我还删除了“-rtl bittree”标签,因为它返回另一个错误

Frama-C版本为最新版本:硫磺-20171101 知道发生了什么吗


谢谢

通常,您应该在与
frama-c
二进制文件相同的目录中安装名为
e-acsl-gcc.sh
的脚本,该脚本可以通过适当的选项调用
gcc
。手册第2.2节记录了其基本用法,
man e-acsl-gcc.sh
提供了可使用选项的更多详细信息。简而言之,你应该能够打字

e-acsl-gcc.sh -c \
  --oexec-eacsl=first_monitored \
  --oexec=first \
  --ocode=first_monitored.i \
  first.i
取得

  • 可执行文件
    首先由e-acsl仪器监控
  • 原始程序的可执行文件
    第一个
  • 首先监视带有e-acsl生成的C代码的源文件.i

Edit查看脚本使用的链接命令,我想说手册前面提出的命令行已经过时(特别是,它指的是
eacsl-jemalloc
,而
e-acsl-gcc.sh
似乎更喜欢
eacsl-dlmalloc
),这可能在

上被报告为错误警告在第13页进行了解释。我认为您可能需要传递一个
-L
链接器标志,告诉编译器在哪里找到要链接的库。查找包含名为
libeacsl.so
或类似文件的目录。
$ gcc monitored_second.c -o monitored_second -leacsl -leacsl-gmp -leacsl -jemalloc -lpthread -lm

monitored_second.c:10:1: warning: ‘__FC_BUILTIN__’ attribute directive ignored [-Wattributes]
 typedef __e_acsl_mpz_struct ( __attribute__((__FC_BUILTIN__)) __e_acsl_mpz_t)[1];

monitored_second.c:18:55: warning: ‘__FC_BUILTIN__’ attribute directive ignored [-Wattributes]
                                                   int line);
                                                   ^
monitored_second.c:25:60: warning: ‘__FC_BUILTIN__’ attribute directive ignored [-Wattributes]
                                                        size_t ptr_size);
                                                        ^
/usr/bin/ld: cannot find -leacsl
/usr/bin/ld: cannot find -leacsl-jemalloc
collect2: error: ld returned 1 exit status
e-acsl-gcc.sh -c \
  --oexec-eacsl=first_monitored \
  --oexec=first \
  --ocode=first_monitored.i \
  first.i