我跟着指示下载并安装 SAC,但是,在执行“make fast”命令时,我收到以下错误:
maxx@ubuntu:~/sac2c-1.00-beta-linux-x86_64/stdlib$ make fast
make -f buildfile MODE=lean
cd modules/structures/lib/..; sac2c -v0 -g -O3 -linksetsize 0 ScalarArith.sac -o lib
****ABORT: line 0 file: /usr/include/stdc-predef.h
ABORT: syntax error at pos 36: '3`
ABORT: # 1 "/usr/include/stdc-predef.h" 1 3 4
ABORT:** ^**
*** Compilation failed ***
*** Exit code 1 (Loading SAC program)
*** 1 Error(s), 0 Warning(s)
make[1]: *** [modules/structures/lib/libScalarArithTree.so] Error 1
make: *** [fast] Error 2
maxx@ubuntu:~/sac2c-1.00-beta-linux-x86_64/stdlib$
我不知道如何继续这里,我认为这可能是我的环境特有的问题,但它似乎非常具体。
我环顾四周,发现这篇关于 gcc 的文章内容如下:
预处理器预包含
GCC 预处理器现在可以预先包含一个文件,该文件为整个翻译单元定义某些宏。这允许完全一致地实现 C99/C11 和其他需要描述实现可用性的编译器或编译器 + 运行时宏的标准。
在 Linux 上,是预先包含的。
这种微妙的变化意味着预处理器的一些更具创造性的用途现在可能会失败,并出现以下诊断:
/usr/include/stdc-predef.h:0: error: Syntax error near '3'
As a workaround, the stdc-predef.h preinclude can be disabled with the use of -ffreestanding. For non C/C++ code, use the pre-processor flag -P.
然后我尝试重新编译
make "CPP=gcc -E -ffreestanding" fast
但仍然没有运气。有任何想法吗?以下是我的架构信息
Linux ubuntu 3.13.0-35-generic x86_64 x86_64 x86_64 GNU/Linux
答案1
$HOME/.sac2crc
通过创建一个具有适当定义的文件CPP_STDIN
和/或,似乎可以覆盖 sac2c 二进制文件本身使用的预处理器定义CPP_FILE
。我可以通过修改文件 ie 来通过添加标志$SAC2CBASE/setup/sac2crc
来抑制行标记生成来做到这一点-P
sed 's/gcc -E/& -P/' $SAC2CBASE/setup/sac2crc > ~/.sac2crc