gcc编译

预处理

hello.c -> hello.i
gcc -E
展开宏、头文件,替换条件编译 删除注释空行空白

编译

hello.i -> hello.s
gcc -S
检查语法规范(消耗时间和系统资源最多)

汇编

hello.s -> hello.o
gcc -c
将汇编指令翻译成机器指令
二进制文件

链接

hello.o -> a.out
gcc
数据段合并,地址回填

-I

指定头文件所在位置
gcc -I 文件位置

-c

制作预处理、编译、汇编

-g

编译时添加调试文件,支持gdb调试

-Wall

显示所有警告信息

-D

向程序中动态注册宏定义

静态库

1、用.c生成.o文件
gcc -c test.c -o test.o
2、使用ar工具
ar acs lib库名.a add.o sub.o div1.o
3、编译静态库到可执行文件中
gcc test.c lib库名.a -o test

动态库

1、用.c生成.o文件(生成与位置无关的代码)
gcc -c add.c -o add.o -fPIC
2、使用gcc -shared 制作动态库
gcc -shared -o lib库名.so add.o sub.o div1.o
3、编译可执行程序时,指定所用的动态库 -l 指定库名 -L 指定库路径
gcc test.c -o a.out -l 库名 -L 库路径
4、运行可执行程序./a.out出错
原因:
链接器: 工作与链接阶段,工作时需要 -l 和 -L
动态链接器:工作与程序运行阶段,工作时需要提供动态库所在目录位置
通过环境变量:export LD_LIBRARY_PATH = 动态库路径
修改.bashrc文件 source .bashrc使其永久生效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值