gcc -e //预处理
gcc -s //汇编
gcc -c //将代码转换为二进制文件,却不链接
gcc -o //生成文件
gcc -c test.c // 生成test.o
gcc main.c -o app //用main.c 生成app
直接使用 gcc main.c 也可以,只不过名称会使用默认名称a.out
gcc的前三个命令正好是 esc 也就是键盘上的退出键,正好与编译器的工作顺序对应,只要记住编译器的工作顺序,记这几个命令就算简单。当然-e -s很少用到,记不记的没太大意义。
-D 指定宏
-D DEBUG 意味着程序中宏定义了DEBUG
-O 优化0123 0不优化 123越来越高
-Wall 编译的时候输出警告信息
-g 添加调试信息
静态库(lib***.a)
- 生成.o 文件
- 将生成的.o文件打包 ar rcs + 静态库的名字(libname.a) + 生成的所有.o
- 使用 -L libpath(L指定静态库的目录) -l libName (库的名字)
nm lib.a 可以看二进制的内容
动态库(lib***.so)
- 生成与位置无关的. o文件
- 将.o 打包成动态库 gcc -fPIC
- 打包 gcc -shared
- 使用 gcc main.c -Iinclude -L./path -lmylib -o app
ldd *.a 查看文件所依赖的所有共享库
export LD_LIBRARY_PATH = ./libpath 临时测试使用
使用
- 找到动态连接器的配置文件(/etc/ld.so.conf)
- 将动态库的路径写到配置文件中 (绝对路径)
- 更新配置文件