gcc编译,出现错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ........

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc编译,出现错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ........相关的知识,希望对你有一定的参考价值。

这个我也遇到了,有以下几种可能:
1,有可能是漏写;或者将)写成,或者是中英文混写,如将英文的)写成中文的)。
2.机器码本身的问题,需要对数据类型进行typedef,如,使用int类型或者 char类型,分别进行定义,typedef in DTYPE,typedef char PCHAR,这一点没试验过,是看别人的
3.没有加上需要的头文件。这一点我碰到了,很神奇。
4.C和C++混编,如在C中使用class inline等,需要加上extern告诉编译器。因为C和C++的编译时找不同的内部代码,如果不告诉他,他会找一种,比如说全部找C的内部解释,那么C++部分的就会出错;
5、明显的错误,比如c代码,结果写了个函数 bool testIt;而bool默认没有定义,所以报错;改成int的就行了;
参考技术A

有时候我们编译一个大的项目的时候,会出现很多错误使得屏幕堆满了很多无用的信息。一般情况下我们需要找到首次出现错误的地方,在gcc中添加编译选项可以使编译停止在第一次出现错误的地方:

$ gcc -Wfatal-errors foo.c     // GCC 4.0 and later$ g++ -Wfatal-errors foo.cpp
$ g++ -fmax-errors=N foo.cpp   // 在出现第 N 此错误的时候停止编译,GCC 4.6 and later

如果使用cmake构建的项目:

add_definitions(    -Wfatal-errors
)

或者SET(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -Wfatal-errors")  // better1234567

打开警告信息:

$ g++ -Wall foo.cpp        //提示警告信息1

警告信息当做错误处理:

$ g++ -Werror foo.cpp      //将警告信息当做错误显示1

打开测试浮点数相等的警告:

$ g++ -Wfloat-equal foo.cpp        //通常测试浮点数相等是不准确的

参考技术B 符号写错了,中英文要注意。

gcc新版本号引起的编译错误(命令运行时的外部库输入位置)

昨天,遇到一个比較bug的错误,用gcc来编译几个简单的文件出错,编译环境为x86_64的Ubuntu12.04。gcc版本号号例如以下:

gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

编译例如以下命令,主要是须要加入一个经常使用数学库libm.so。编译的语法例如以下出现了例如以下的错误:

gcc -lm main.c bp_alg_api.c -o test

还是会出现没有链接时指定的库文件lm。

假设这样就能够成功:

gcc main.c bp_alg_api.c -lm  -o test

或许上面的命令运行更加清晰。先把源文件编译,然后再去处理链接,链接的库须要在源文件的后面。体现规范和编译的流程性。

 

至于在低版本号比方gcc4.5。或者说经常使用的arm交叉编译器时,上述两种方式的处理过程都是正常的。

 

gcc编译出的目标文件。再使用arm交叉编译gcc来链接出可运行文件。会出现Relocation in generic ELF(M:3)的错误。须要明白编译和链接採用的编译器属性要一致,gcc还是交叉编译gcc。两者不能混淆。


以上是关于gcc编译,出现错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ........的主要内容,如果未能解决你的问题,请参考以下文章

line: 1: Syntax error: word unexpected (expecting ")")

gcc 10.2.0编译glibc2.25出现错误

如何编写带有目标“错误”的makefile?

用mingw32 gcc 一编译就出一大堆错误,应该怎么解决

linux 编译libnids 出现错误

无法使用 gcc 在 Linux 中编译任何 c++ 程序,出现一些奇怪的错误 [重复]