linux环境下用gcc生成.a静态库和.so动态库

目录

一、用hello world作为例子

(1)创建所需的hello.c,hello.h,main.c程序

(2)生成.o文件

(3)利用.o文件创建.a静态库

(4)在程序中使用静态库

(5)创建.so动态库文件

(6)在程序中使用动态库

(7)静态库和动态库优先级

二、实例示范

   (1)程序编写

 (2)生成静态库

 (3)生成动态库

 (4)静态库与动态库文件大小对比

 三、总结

 四、参考文献


一、用hello world作为例子

(1)创建所需的hello.c,hello.h,main.c程序

首先在终端中利用代码

mkdir hello

 创建一个名为hello的文件夹

然后使用gedit文本编辑器生成hello.c,hello.h,main.c三个文件,三个文件源代码如下

hello.h

#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif //HELLO_H

hello.c

#include <stdio.h>
void hello(const char *name)
{
printf("Hello %s\n", name);
}

main.c

#include "hello.h"
int main()
{
hello("world");
return 0;
}

(2)生成.o文件

利用代码

gcc -c hello.c

生成hello.o文件 

(3)利用.o文件创建.a静态库

静态库文件名的命名规范是以 lib 为前缀,紧接着跟静态库名,扩展名为.a。例如:我们将 创建的静态库名为 myhello,则静态库文件名就是 libmyhello.a。在创建和使用静态库时, 需要注意这点。创建静态库用 ar 命令。在系统提示符下键入以下命令将创建静态库文件 libmyhello.a。

ar -crv libmyhello.a hello.o 

(4)在程序中使用静态库

在使用到这些公用函数的源程序中包含这些公用函数的原型声明,然后在用 gcc 命令生成目标文件时指明静态库名,gcc 将会从静态库中将公用函数连接到目标文件中。注意,gcc会在静态库名前加上前缀 lib,然后追加扩展名.a 得到的静态库文件名来查找静态库文件。

输入

gcc main.c libmyhello.a -o hello

即可生成目标程序hello,输入

./hello 

即可输出函数结果

删除静态库文件libmyhello.a后,发现程序依旧可以正常运行,表明公用函数hello已经连接到目标文件hello中了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值