Gcc
安裝單一作業 C (SAC) 時出錯
我按照說明下載和安裝 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
似乎可以通過創建一個
$HOME/.sac2crc
具有適當定義的文件來覆蓋 sac2c 二進製文件本身使用的預處理器定義CPP_STDIN
和/或CPP_FILE
。我可以通過修改文件來做到這一點,即通過添加標誌$SAC2CBASE/setup/sac2crc
來禁止行標記生成-P
sed 's/gcc -E/& -P/' $SAC2CBASE/setup/sac2crc > ~/.sac2crc