linux学习-gcc的静态库和动态库的创建和使用

gcc       hello.c    -o    hello                   生成hello可执行文件

gcc -c   hello.c                                      生成目标文件(.o文件)

gcc -E    hello.c > hello.i                      生成预处理文件写入hello.i中

gcc -s  hello.c                                      生成hello.s汇编文件 

gcc -o  hello.c                                     生成默认a.out可执行文件

gcc -O hello.c                                     生成默认a.out可执行文件,优化等级为1,O1,O2可替换

gcc -g                                                用于之后gdb调试

静态库:是在执行程序之前就已经加入到执行代码中,成为执行程序的一部分来执行的,后缀名:.a

动态库:是在执行程序启动时加载到执行代码中,后缀名:.so

静态库创建和使用步骤:

例如:main.c(执行主函数和输出加减乘除结果的函数),add.c(加函数),sub.c(减函数),mul.c(乘函数),div.c(除函数),main.h(包含四个函数头文件)

由于函数的默认返回值为整形,而div函数有时返回的是实数,所以要先声明函数,即在头文件中声明“”main.h“”即可。

add.c:
int add(int a,int b)
{

		return a+b;

}

sub.c:
int sub(int a,int b)

{


		return a-b;
}

mul.c:
int mul(int a,int b)
{


		return a*b;

}

div.c:
float div(int a,int b)
{



		return ((float)a)/b;
}

main.h:
extern int add(int,int);
extern int sub(int,int);
extern int mul(int,int);
extern float div(int,int);

main.c:
#include<stdio.h>
#include"main.h"
int main()
{
   int a,b;
   scanf("%d %d",&a,&b);
   printf("%d+%d=%d\n",a,b,add(a,b));
   printf("%d-%d=%d\n",a,b,sub(a,b));
   printf("%d*%d=%d\n",a,b,mul(a,b));
   printf("%d/%d=%f\n",a,b,div(a,b));

   return 0;


}

1.首先运行

gcc -c main.c main.h add.c sub.c mul.c div.c -o main

确保可执行生成main文件,./main运行文件。

2.然后运行下面代码,生成四个.o文件。

gcc -c add.c sub.c mul.c div.c 

(不包含main函数文件的其他.c文件)。

3.创建静态库:创建abc静态库,格式为:lib+name+.a  并将所需的目标文件加入静态库

rc:静态库不存在,就创建该库文件   

 s:更新库文件

ar rcs libabc.a  add.o sub.o mul.o div.o 

4.若想对比,先删除以前的main文件,再编译文件

gcc main.c -o main -L. -labc     (-I..)

-L 后面的是静态库的路径,-l后面的是静态库的名字,如果像main.h的头文件不在本层目录,则-I后面的是头文件的路径

则静态库完成搭建。

 动态库的搭建和使用:

1.直接在本层目录下创建一个新的目录,将main.c复制进去。

2.创建动态库

gcc -shared -fPIC -o liabc.so  源文件

 动态库名:li+name+.so  源文件即add.c之类的文件的位置(除main,c)

因为建库时源文件在上一层目录,所以都要加上../

编译时注意加上头文件main.h的位置,我的main.h在上一层即要加上-I.. 

动态库完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值