gcc 错误提示及解决方法汇总

来源:互联网 发布:python 窗口编程 编辑:程序博客网 时间:2024/05/16 18:10
       最近在分析trimaran代码,所以常常需要在linux上用gcc编译代码,期间出现了好多次错误提示,就在这把这些错误给记录下落,以防重蹈覆徹啦!
      1)storage class specified for parameter
           检查过后发现头文件的一个函数声明后面忘加分号了,汗一个~~~~
           所以以后出现这种错误,就检查错误之间所有的代码和被包含的文件里是否出现这种错误就ok啦。
       2)‘for' loop initial declaration used outside C99 mode
                     我在for循环的初始化部分声明了变量,因为C89和C94不支持for循环变量i在循环内定义,但C99支持所以你上面这样写只有C99支持,如果你编译的时候std=c99,编译器就不会报上面的错误。所以两种解决方案:
          解决方法一:
                  把声明提出来就好了

           解决方法二:
                   加上-std=c99参数
           即gcc -std=c99 -o hello hellolinux.c
       3)undefined reference to
            这种错误好像是在某个符号不能确定在哪定义而产生的,,所以能很可能是少了个头文件,要么就是该链接的.a或.o找不到,如果有的话那就是版本不对。
            不过我这次出现的问题是在头文件里定义了某个类型,而在相应的.c文件中声明该类型变量时还加了个extern,直接导致链接时无法找到该符号的定义。
        4)段错误,Program received signal SIGSEGV, Segmentation fault.
              这个问题呢,我还么解决。跑的程序如下:
        / sample1.c
                #include<stdio.h>
                     int a=4,b;

                   int fun(int x)
                 {
                        x++;
                         printf("%d/n",x);
                       return x;
                 }
                int main()
               {
                   int c[2];
                   b=fun(a);
                  printf("This is ok!");
                 c[0]=a;
                 c[1]=b;
                return 1;
               }
               用gcc直接编译没问题,但是用trimran的tcc命令之后生成的可执行文件运行时就报段错误了,这个trimran还是用的静态链接,我还么发用gdb调试,很挫败呀,不知道这个小代码中有什么隐藏的问题,谁来解答下呢!
原创粉丝点击