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

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

gcc编译流程和相关参数

image-20220214162739341

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

image-20220214163002210

普通文件为 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. 将库与头文件一起发布
image-20220215204710284

ldd 程序查看所链接的库

动态库的使用

  1. 直接将.so文件放到/lib或者/usr/lib下(做链接也可以)不推荐使用

  2. 将库路径增加到环境变量中 LD_LIBRARY_PATH 不推荐

    export LD_LIBRARY_PATH=/home/lib/:$LD_LIBRARY_PATH一次设置,退出后就失效

    最后的“:”后面表示不会清空之前的变量,而是增加

    • 如果要永久生效就要在.bashrc中将上面的命令写入,因为linux启动时会查看.bashrc文件
  3. 修改/etc/ld.so.conf,添加库路径在该文件中,然后执行sudo ldconfig -v-v表示显示执行过程

作者

步步为营

发布于

2024-05-08

更新于

2025-03-15

许可协议