静态库和动态库的创建,遇到的问题与问题解决方法

目录

 

一,库

1.概念

2.库的分类

1-静态库和动态库的区别:

2-静态库的建立

3-动态库的建立


        之前我在学习和动手操作静态库和动态库的过程中遇到的问题,已在本教程中解决并写到了操作过程中,教程从之前的一篇博客中分离出,本文单独讲解两种库的建立;

        学习过程中遇到的问题:

  1. 测试静态库时,“gcc main.c -L./库文件所在的文件夹名  -lmyfile”,该命令的-L.后面没有加库文件所在的文件夹名,因为库文件就在下一级的文件夹中,所以只需要加一个文件夹名;或者有时候会忘记添加“-L”后面的“.”。
  2. 将动态库的库文件复制到“/usr/lib”文件夹下时,提示该文件夹下不能复制,手动复制粘贴也不行,不能点击粘贴选项,所以必须在命令前添加sudo保证有足够大的权限。
  3. 分享一篇解决找不到静态库问题的链接:关于C#:找不到静态库 | 码农家园

一,库

1.概念

    库就是把一些常用函数的目标文件打包在一起,提供相应的函数接口,便于程序员使用;

    本质上来说,库是一种可执行代码的二进制形式。

2.库的分类

    库包括静态库和动态库。

1-静态库和动态库的区别:

静态库动态库
什么时候载入代码程序编译时(链接过程)程序运行时
优点运行时不需加载库,运行速度更快代码体积小,程序升级简单,不同程序调用相同的库,只需要在内存中有一份共享库
缺点代码体积大,静态库升级时,程序需要重新编译链接运行时需要动态库的存在,移植性差

2-静态库的建立

        在文件夹file中创建一个没有头文件的file.c文件,文件中实现返回两个整型数相加的值的函数功能;

(1)将原文件编译生成目标文件

gcc -c file.c -o file.o

命令执行后,file文件夹中出现file.o文件;

(2)用ar命令创建静态库,将.o文件转换为.a文件

ar crs libmyfile.a file.o

命令执行后,file文件夹中出现静态库文件limyfile.a

(3)测试静态库。在main.c所在的文件目录下

        在相同路径下的上一级的文件夹中创建main.c和file.h文件,在file.h文件中声明file.c中的函数,main.c要包含file.h文件;

gcc main.c -L./库文件所在的文件夹名  -lmyfile              //-L是指定库的路径,注意L后面有个点

(l后面跟静态库名,在编译时会自动补全lib)

执行./a.out

执行可执行文件后,终端输出两数相加之和。

3-动态库的建立

        首先要操作的与静态库的操作相同,在文件夹test中创建一个没有头文件的test.c文件,文件中实现返回两个整型数相乘的值的函数功能;也要在上一个文件夹中创建main.c和test.h,main.c要包含test.h头文件,test.h中要声明test.c中的函数;

(1) gcc -fPIC -c test.c -o test.o

     gcc -shared -o libmytest.so test.o

(2)把库拷贝到/usr/lib的/lib目录下(编译时就不需要指定库的路径,最方便的操作)

sudo cp libmytest.so /usr/lib    //一定要加sudo

 

 

(3)测试动态库的使用,在main.c所在的文件目录下

gcc main.c -L. -lmytest

最后输出两数相乘之积; 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值