Linux 下C语言编译错误
来源:互联网 发布:黑暗剑圣txt下载知轩 编辑:程序博客网 时间:2024/06/08 08:18
gcc 是linux下最流行的c语言编译器,gdb是最流行的调试器,编译运行通过后,接下来最重要的便是调试了,我们这里简单的介绍一下gdb调试器的使用。
首先在编译源码时,我们加上 -g选项,例如 gcc -g hello.c 。然后运行gdb调试器。 gdb ./a.out ,其中后面的./a.out 就是我们要运行的调试的目标程序。运行上述命令后gdb开始工作,我们简单的介绍一下它的几个实用的命令和技巧。
break 13 //在13处设置断点。 clear 13 //清除13处的断点
next //单步执行,不进入函数 step //单步执行,进入函数 continue //执行到下一个断点或者是程序的结束
print a //查看变量a的值 print *a@len //查看数组a成员的值
watch + [变量][表达式] 当变量或表达式值改变时即停住程序。
rwatch + [变量][表达式] 当变量或表达式被读时,停住程序。
awatch + [变量][表达式] 当变量或表达式被读或被写时,停住程序。
0. 编译时应该考虑警告
gcc -O2 -Wall 的形式编译
1. undefined reference to `sqrt'
已经包含了头文件 math.h 但是仍然会报此错误,原因是没有链接math数学库的问题。
gcc hello.c -lm
-lm就是链接到math库的问题。
2. undefined reference to `pthread_create
pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。解决方法是加上 -lpthread
3. fgets 引起的段错误
确切的说是向fgets传递错误的参数导致的段错误,程序编译通过,运行时产生段错误,于是使用gdb进行跟踪,发现运行到下列步骤时出现错误
while(fgets(line,MAXLINE,fp) !=NULL)函数原型如下
char *fgets(char *s, int n, FILE *stream);
作用是从文件流中读取n个字符,放到s指向的空间中,如果成功返回s指针,失败返回NULL。我查看了一下自己的程序源码,发现传递的指针是一个未分配空间的指针,没有进行初始化,因此在数据写入时可能会访问到其他空间,造成段错误。
4. 警告:格式字符串不是一个字面字符串而且没有待格式化的实参
sys(level,buf); -> sys(level,"%s",buf);
5. double free or corruption (fasttop): 0x09545110
原因:对内存的释放重复了。。。
6.求教gcc编程时 出现错误 : expected ‘;’, ‘,’ or ‘)’ before ‘&’ token:
在C语言里没有C++所谓的“按引用传递”,即Exchg3(int &x, int &y)应改为Exchg3(int *x, int *y)然后再这样调用Exchg3(&a, &b)就不会出错了,当然前提是你得把Exchg3(int *x, int *y)修改正确了
7. warning: incompatible implicit declaration of built-in function ‘exit'
原因:没有包含exit的头文件 stdlib.h
8.函数已经在头文件中定义了,但是编译时提示没有定义。err_quit函数定义在unp.h头文件中,readline.c 文件引用了这个头文件,实现readline函数。
tcpcli01.c引用了头文件unp.h,实现一些错误除了,并调用readline函数。然后进行编译,出现了函数重复定义的错误。
10.生成汇编
有时候,我们要查看源码生成的汇编,来对程序进行分析和优化,在编译时加上 -S选项就ok了。
11 客户端连接服务器失败
在一个简单的服务器/客户端 程序中,客户端连接服务器失败,但是不返回任何的错误信息,可能原因之一是两者的端口设置问题。
12 错误: expected identifier before numeric constant
原来是因为有其他模块定义了同名的宏
- Linux 下C语言编译错误
- linux下编译C 语言
- Linux 下编译C语言
- linux下 c语言多文件编译
- linux下C语言编译过程
- linux下c语言的编译
- linux下 c语言多文件编译
- linux下 c语言多文件编译
- linux下C语言编译的问题
- Linux下编译C语言程序
- Linux下编译C语言程序
- linux下如何编译c语言
- C语言编译错误
- linux下C语言错误整理
- C语言linux下实现多语言以及错误处理
- 【C语言】Linux操作环境下编译C程序
- linux下GCC编译环境中二叉树遍历、C语言实现以及调试过程中段错误
- c语言常见编译错误
- java-PATH是什么
- discuz x2实现伪静态 htaccess篇
- onbeforeunload与onunload事件
- 初学者笔记:自动生成数据列的gridview设置具体某列的列宽及添加序号列
- 用sql语句创建一个与表A字段相同的表B
- Linux 下C语言编译错误
- 关于绑定GridView的两种写法
- Java String null 奇怪问题
- 线程协作测试
- cocos2d-x UI之技能冷却按钮
- superMap创建数据库型数据库之后无法新建数据集
- C++ 类访问控制(public/protected/private)小结
- Android 如何判断静音模式
- 页面置换、作业调度、进程调度小剖析[转帖]