静态库和动态库的创建,遇到的问题与问题解决方法
作者:快盘下载 人气:目录
一;库
1.概念
2.库的分类
1-静态库和动态库的区别;
2-静态库的建立
3-动态库的建立
之前我在学习和动手操作静态库和动态库的过程中遇到的问题;已在本教程中解决并写到了操作过程中;教程从之前的一篇博客中分离出;本文单独讲解两种库的建立;
学习过程中遇到的问题;
测试静态库时;“gcc main.c -L./库文件所在的文件夹名 -lmyfile”;该命令的-L.后面没有加库文件所在的文件夹名;因为库文件就在下一级的文件夹中;所以只需要加一个文件夹名;或者有时候会忘记添加“-L”后面的“.”。将动态库的库文件复制到“/usr/lib”文件夹下时;提示该文件夹下不能复制;手动复制粘贴也不行;不能点击粘贴选项;所以必须在命令前添加sudo保证有足够大的权限。分享一篇解决找不到静态库问题的链接;关于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
最后输出两数相乘之积;
加载全部内容