linux之gcc

1. C文件变为可执行文件的过程

1.1 预处理器处理

  • 头文件展开,宏替换,注释去掉
gcc -E hello.c -o hello.i

1.2 编译器处理

  • C文件变为汇编文件
gcc -S hello.i -o hello.s

1.3 汇编器处理

  • 将汇编文件变为二进制文件
gcc -c hello.s -o hello.o

1.4 连接器

  • 将库函数中的相应代码组合到目标文件中
gcc hello.o -o hello

2. gcc相关命令

2.1 编译时指定头文件目录

gcc sum.c -I ./include -o app

2.2 编译时添加一个宏定义

gcc sum.c -o app -D DEBUG

2.3 在编译时输出警告信息

gcc sum.c -Wall

2.4 编译时包含调试信息

gcc sum.c -g

2.5 编译时指定动态库或静态库的信息

gcc main.c -I ../include -L lib -l MyCalc -o myapp

# -I:头文件的位置
# -L:库的位置
# -l:库的名称

3. gcc之制作静态库

3.1 静态库的命名规则

  • lib+库的名字+.a
  • 如 libmytest.a

3.2 静态库的制作步骤

  • 生成对应的.o文件。
  • 将生成的.o文件打包成静态库
gcc *.c -c

ar rcs libMyCalc.a *.o

3.3 发布静态库

  • 发布静态库 libMyCalc.a

  • 发布静态库所对应的头文件 

4. gcc之制作动态库

4.1 动态库的命名规则

  • lib+名字+.so
  • 如libmytest.so

4.2 制作步骤

  • 生成与位置无关的.o代码
  • 将.o文件打包成共享库
# -fPIC:生成与位置无关的代码
gcc -fPIC -c *.c 

# 打包为共享库
gcc -shared -o libMyCalc.so *.o 

4.3 如何让系统找到共享库

  • 方式一:拷贝自己的共享库到/lib 或者/usr/lib文件下
  • 方式二:设置环境变量
    • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库路径
# 查看某个可执行文件的动态链接库的信息
ldd myapp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值