linux-GCC编译过程以及静态库动态库编译

本篇主要讲GCC编译过程以及静态库和动态库编译

一、gcc编译指令各项参数
四个步骤
预处理 -E gcc -o test.i -E test.c
汇编 -S gcc -o test.s -S test.c
机器码 -c gcc -o test.o -c test.c
链接 依赖的文件 gcc -o test test.o
-o 生成目标
-g 调试

1.常用参数
-L 指定库文件所在的目录
静态库 .a 链接时被编译到可执行程序中,运行时在可执行文件中找函数
动态库 .so 链接时只是指定了要调用的库,运行时到/lib 里去找函数库

   库文件名 前缀+库名+后缀
            lib       .a  .so
            
            libm.a 是math.h  libm.a是库文件名 m是库名       
   库名     

-l 指定库名

   gcc -o test test.c mplay.c -L/usr/lib -lpthread
   pthread是库名 库文件名在/usr/lib目录中,-L可省略  -l必须存在

   -static 代表强制使用静态
   -shared 动态

-I 用来指定头文件所在的目录
gcc -o test -I./lib -include mplay.h test.c ./lib/mplay.c -lpthread

   gcc -o test -I./lib test.c ./lib/mplay.c -lpthread

-include 用来指定引入头文件
gcc -o test -include mplay.h test.c mplay.c -lpthread

-L 和-l是链接时使用
-I 和-include 机器码时使用

2.其它参数
-shared 生成共享目标文件。通常用在建立共享库时。
-static 禁止使用共享连接。
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
-O0 不进行优化处理。
-O 或 -O1 优化生成代码。
-O2 进一步优化。
-O3 比 -O2 更进一步优化,包括 inline 函数。
-g 生成调试信息。GNU 调试器可利用该信息。
-ansi 只支持 ANSI 标准的 C 语法。
-pipe 使用管道

3.静态库编译
两个步骤
1)生成机器码 -c
2)用ar编译静态库
gcc -o mplay.o -c mplay.c
ar -rc libmplay.a mplay.o

 库的使用
 gcc -o test -I./lib test.c -L./lib -lmplay -lpthread 
 
 -lm   指针libm.a 里面是函数的定义
 math.h 是libm.a内函数的扩展声明

4.动态库编译
1)生成机器码 -c
2)用gcc编译静态库 -shared -fPIC
gcc -o mplay.o -c mplay.c
gcc -shared -fPIC -o libmplay.so mplay.o

库的使用
gcc -o test -I./lib -include mplay.h test.c -L./lib -lmplay -lpthread
  
将libmplay.so拷贝到/lib中然后运行程序

强制指定使用静态库编译程序     
gcc -o test -I./lib -include mplay.h test.c -L./lib -lmplay -lpthread -static

5.c++调用标准c的函数
//test.cpp
extern “C”{
#include “mplay.h”
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走在软件开发路上的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值