UNIX 动态库和静态库

       动态库,又叫做共享对象库,以.so结尾。使用动态库时,编译器并不直接在编译的时候将代码嵌入到目标文件中,而是等到运行时调用相应的函数,才加载代码。

       静态库,又叫做归档文件,以.a结尾。使用静态库的时候,编译器在编译过程中直接将代码嵌入到目标文件中,所以一旦完成编译,那么静态库可以不需要了。


1、编写静态库以及使用静态库

首先编写hello.h文件。



然后编写hello.c文件。



然后编写main.c。



我们使用gcc -c hello.c得到二进制目标文件hello.o,然后使用ar命令生成静态链接库libhello.a。

ar -cru libhello.a hello.o

指定链接库对main.c进行编译链接生成可执行文件main.out

gcc -o main.out -L. -lhello main.c

执行main.out文件得到结果:


这样就完成从编写静态链接库到使用静态库的全部过程。



2、编写动态库并且使用动态库

现在我们来完成动态链接库的编写。

还是上面的hello.h hello.c main.c文件,我们生成动态链接库libhello.so。

使用命令gcc -c hello.c -fPIC生成hello.o目标文件,使用gcc -shared将hello.o加入到动态库libhello.so中,

gcc -shared hello.o -o libhello.so

编译链接main.c

gcc main.c -o main.out -L. -lhello

配置LD_LIBRARY_PATH的内容包含当前目录:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

执行main.out得到下面的运行情况。



三、程序中显式加载动态库

       还是按照前面的步骤,生成动态库libhello.so,然后在main.c程序中显式的加载动态库,具体见代码:



        使用gcc -ldl main.c -o main.out生成可执行程序。执行main.out的时候也需要寻找动态库的路径中包含当前目录,也就是同样使用export LD_LIBRARY_PATH=.。然后执行可执行程序得到的结果与2中的结果相同。


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以回答你的问题。 首先,我需要确认一下你的操作系统是什么,因为制作静态库动态库的步骤会有所不同。 如果你使用的是类Unix操作系统(如Linux、macOS等),可以按照以下步骤制作可伸缩循环队列的静态库动态库: 1. 编写可伸缩循环队列的源代码,并保存为一个或多个源文件(例如,queue.c)。 2. 在命令行中使用gcc编译源文件,生成目标文件(例如,queue.o): ``` gcc -c queue.c -o queue.o ``` 3. 使用ar命令将目标文件打包成静态库(例如,libqueue.a): ``` ar rcs libqueue.a queue.o ``` 这会生成一个静态库文件libqueue.a,其中包含可伸缩循环队列的函数实现。 4. 使用gcc编译源文件并链接静态库,生成可执行文件(例如,main): ``` gcc main.c -o main -L. -lqueue ``` 这会生成一个可执行文件main,其中包含了对可伸缩循环队列静态库链接。 5. 使用gcc编译源文件,生成动态库(例如,libqueue.so): ``` gcc -shared -o libqueue.so queue.o ``` 这会生成一个动态库文件libqueue.so,其中包含可伸缩循环队列的函数实现。 6. 使用gcc编译源文件并链接动态库,生成可执行文件(例如,main): ``` gcc main.c -o main -L. -lqueue ``` 这会生成一个可执行文件main,其中包含了对可伸缩循环队列动态库链接。 以上就是制作可伸缩循环队列的静态库动态库的步骤,希望能帮助到你。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值