Linux下编译和调试

1
2
3
4
5
6
7
8
#预处理 c++一般用.ii后缀
gcc -E test.c -o test.i
#编译
gcc -S test.i -o test.s
#汇编
gcc -c test.s -o test.o
#链接
gcc test.o -o test.out
3_linux下编译与调试
gcc库选项 含义
-static 进行静态编译,即链接静态库,禁止使用动态库
-shared 1、可以生成动态库文件
2、进行动态编译,尽可能地链接动态库,只有没有动态库时才会链接同名的静态库(默认选项,可以省略)
-L dir 在库文件的搜索路径列表中增加dir目录
-lname 链接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static或者-shared)而进行链接
-fPIC(-fpic) 生成使用相对地址的位置无关的目标代码。然后通常使用gcc的-static选项从PIC目标文件生成动态库文件

-静态库 链接器会将搜索静态库并直接拷贝到该程序的可执行二进制文件到当前文件

-动态库 在程序编译时并不会被链接到目标代码中,而是在程序运行时才被载入

1
2
3
4
5
6
7
8
#创建静态库
gcc -c add.c
ar -crsv libadd.a add.o
#创建动态库
gcc -fPIC -Wall -c add.c
gcc -shared -o libadd.so add.o
#使用动态库
gcc -o main main.c -ladd
gcc警告选项 含义
-ansi 支持符合ANSI标准的C程序
-pedantic 允许发出ANSI C标准所列的全部警告信息
-pedantic-error 允许发出ANSI C标准所列的全部错误信息
-w 关闭所有告警
-Wall 允许发出gcc提供的所有有用的报警信息
-werror 把所有告警信息转化为错误信息,并在告警发生时终止编译过程

gcc优化选项 -On(n=1,2,3),通常用-O2,调试不使用