3.gcc编译流程和库制作 C++/Linux

2.gcc 编译流程-C语言

  • gcc -E hello.c > hello.i
    • 预处理,头文件展开,宏替换
    • gcc -E 默认输出在屏幕上,
    • 使用重定向>清空文件内容写入
    • >> 在文件啊后继续添加
  • gcc -S hello.i
    • 生成汇编语言
    • 生成hello.s文件
  • gcc -c
    • 将汇编翻译成二进制文件
    • 生成hello.o文件
  • ld 链接
    • 得到a,out
  • -I ./include 指定头文件路径
  • -o 指定输出文件
    • -o hello.out
  • -D DEBUG 指定宏编译,可以用于Debug
  • -L 指定库路径
  • -g 用于gdb调试,不加此选项不能进行gdb调试
  • -Wall 显示更多得警告
  • gcc hello.cpp -lstdc++ 用gcc编译c++文件

3.制作库

  • 静态库
    • 文件命名:libxxx.a 对应windows的lib文件
    • gcc -c 生成.o文件
    • ar rcs libCalc.a *.o 生成.a文件
    • 可以用nm filename 查看文件内容
    • 发布,与头文件.h一起发布
    • 使用:gcc main.c -o main.out -I include/ -L lib/ -lCalc
      • -I 头文件目录
      • -L 库文件目录
      • -l+库名(libCalc.a 取Calc )
  • 动态库
    • 编译与位置无关的文件 生成 .o 文件 ,关键参数-fPIC
      • gcc -fPIC -c *.c -I ../include/
    • .o文件打包成.so文件,关键参数-shared
      • gcc -shared -o libCalc.so *.o
    • 将库与头文件一起发布
    • 使用:
      • 拷贝到/lib 目录下,不允许
        • ln -s srcpath /lib/libCalc.so 软连接
        • ldd filename 是:list dynamic dependencies 列出动态库依赖关系
      • 将库路径添加到环境变量LD_LIBRARY_PATH ,一般推荐
        • echo $LD_LIBRARY_PATH 查看环境变量
        • export LD_LIBRARY_PATH=/home/lcl/cmd/Calc/lib/: $LD_LIBRARY_PATH:分割不会影响之前的环境变量
      • 配置/etc/ld.so.conf 文件,增加/home/-----,再执行sudo ldconfig -v,-v是显示运行,非常常用
        • sudo vi /etc/ld.so.conf
        • 添加路径
        • sudo ldconfig -v
  • 优缺点:
静态库动态库
优点1. 执行快
2.发布应用时不需要发布库
1.执行体积小
2.库变更时一般不需要重新编译应用
缺点1.执行程序体积比较大
2.库变更时需要重新编译应用
1.执行时需要加载动态库,相对慢
2.发布应用时需要同时发布动态库
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值