2、gcc编译流程和相关参数
gcc编译流程和相关参数

file 文件–查看文件,如果是可执行文件,则为ELF

普通文件为 ASCII text
gcc参数
参数 | 含义 | 示例 |
---|---|---|
I | 包含头文件路径(绝对路径或相对路径) | gcc add.c -I ./include |
o | 目标文件 | gcc add.c -o pro.out |
D | 直接指定宏 | gcc add.c -D DEBUG |
L | 包含库路径 | gcc main.c -I include/ -L lib/ -lCalc |
l | 指定库名 | 库名:libxxx.so 使用方式:-lxxx |
c | .o文件(二进制文件) | 生成.o文件 |
g | 用于gdb调试 | |
Wall | 输出警告 | |
lstdc++ | 编译cpp文件 | gcc hello.cpp lstdc++ -o pro.out 也可以g++ hello.cpp |
E | 预编译 | |
S | 汇编 |
**linux下 **
静态库.a 命名为:libxxx.a 对应于windows下的.lib
制作步骤:
1. 编译为.o文件
2. 将.o文件打包`ar rcs libmycalc.a file1.o file2.o`
3. 将头文件与库一起发布
查看库文件信息nm libmycalc.a
动态库.so
制作步骤:
1. 编译与位置(存放位置)无关的代码,生成.o文件(就是加上`-fPIC`参数)gcc cal.c -I ./ -c -fPIC
1. 将.o文件打包,加参数-shared `gcc -shared -o libCalc.so file1.o file2.o`
1. 将库与头文件一起发布

ldd 程序
查看所链接的库
动态库的使用
直接将.so文件放到/lib或者/usr/lib下(做链接也可以)不推荐使用
将库路径增加到环境变量中
LD_LIBRARY_PATH
不推荐export LD_LIBRARY_PATH=/home/lib/:$LD_LIBRARY_PATH
一次设置,退出后就失效最后的“:”后面表示不会清空之前的变量,而是增加
- 如果要永久生效就要在.bashrc中将上面的命令写入,因为linux启动时会查看.bashrc文件
修改/etc/ld.so.conf,添加库路径在该文件中,然后执行
sudo ldconfig -v
-v表示显示执行过程
2、gcc编译流程和相关参数