栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux下静态库、动态库的制作和使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux下静态库、动态库的制作和使用

材料准备:fun1.c  fun2.c  head.h  main.c

fun1.c

 1 #include 
 2 void fun1()
 3 {
 4     printf("this is fun1n");
 5 }

 fun2.c

 1 #include 
 2 void fun2()
 3 {
 4     printf("this is fun2n");
 5 }

head.h

 1 void fun1();
 2 void fun2();

main.c(需要引入head.h文件)

      1 #include 
      2 #include 
      3 #include "head.h"
      4 
      5 int main(int argc, char *argv[])
      6 {
      7     printf("this is main!n");
      8     fun1();
      9     fun2();
     10     return 0;
     11 }

1 静态库

1.1 制作静态库

第一步:将fun1.c fun2.c编译为fun1.o fun2.o(-c命令会自动编译为对应的.o文件,-o fun1.o fun2.o可省略)

gcc -c fun1.c fun2.c [-o fun1.o fun2.o]

第二步:使用打包工具ar将准备好的.o文件打包为.a文件

在使用ar工具时,需要添加参数rcs:r更新、c创建、s建立索引

ar rcs 静态库名 需要打包的.o文件(注意静态库名的命名规则为lib+库名(test1)+.a)

ar rcs libtest1.a fun1.o fun2.o

1.2 使用静态库

gcc -o main1 main.c -I[头文件的路径,可以写相对也可以写绝对] -L[静态库也就是libtest1.a的路径,可以写相对也可以写绝对] -l[静态库的名字,如tset1]

gcc -o main1 main.c -I./ -L./ -ltest1

1.3 运行

 

 2 动态库

2.1 制作动态库

第一步:生成目标文件.o时要加编译选项:-fpic/-FPIC

参数:-fpic(pic, position independent code)创建与地址无关的编译程序,目的就是为了能够在多个应用程序间共享。

gcc -fpic -c fun1.c fun2.c

 第二步:生成共享库,此时要加链接器选择:-shared(指定生成动态链接库)

gcc -shared 要打包的.o文件 -o 动态库的命名(lib + 库名 + .so)

gcc -shared fun1.o fun2.o -o libtest2.so

2.2 使用动态库

与使用静态库的方式相同

gcc -o main2 main.c -I./ -L./ -ltest2

2.3 运行

2.4 可能会出现的问题及解决方案

问题: 

 解决:

将export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径(:表示拼接,相当于windows环境变量中的;),设置到~/.bashrc文件中

 然后使配置文件生效

在~目录下执行:. .bashrc或者source ~/.bashrc

利用echo $LD_LIBRARY_PATH命令查看是否是否有自己配的环境变量了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/299905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号