(Linux之初学篇)关于Linux动态库、静态库调用解读

一、当前目录文件情况,我已把文件清空

二、我现在建立三个  .c文件(其中两个为调用方法,一个为main.c),一个头文件

/*file1.c*/

#include"stdio.h"  // ""表示在函数编译时会先找我们当前所写C语言的路径的库,<>会直接从系统找库

void file1(){

   printf("这是函数一的输出\n");// 不要加return 0, 该函数返回类型为空

}

/*file2.c*/

 

#include"stdio.h"  // ""表示在函数编译时会先找我们当前所写C语言的路径的库,<>会直接从系统找库

void file2(){

   printf("这是函数二 的输出\n");// 不要加return 0, 该函数返回类型为空

}

/*main.c*/

#include"stdio.h

int main(){

   printf("我正在调用两个函数\n");

   file1();

   file2();

   printf("函数调用完毕\n");

   return 0;

}

三、目录文件显示

先直接编译执行main.c,黄字表示链接错误,因为它没找到库

四、我们来生成动态库和静态库

第一步:现将  .c文件转成  .o(二进制文件)

gcc -c file1.c -o file1.o

gcc -c file2.c -o file2.o

第二步生成库

动态库生成方法

gcc -shared -fpic -o libpf.so file1.o file2.o

静态库生成方法

ar -cr libpf.a file1.o file2.o

目录显示

在动态库、静态库同时存在的情况下 ,函数优先执行动态库。那么动态库、静态库有什么区别?

静态库是在编译时写进执行函数内,动态库是执行时调用(需要给出找寻路径,一般默认为系统库),

所以前者写出的文件特别大,后者比较小。如果一个库改变,前者需要重新编译全部,后者仅编译改动的库即可。

下面我们看执行动态库的情况

为什么还出现报错?上文我们说明了,动态库执行是要从系统库里查找,我们把动态库放到系统库里试下(我的电脑是在/lib)

静态库的调用就比较简单了,直接gcc -L. -lpf -o test2 

如果不想把动态库放进/lib ,可以采取export LD_LIBRARY_PATH=:'pwd'

大家有什么想法可留言(限新手),后续我会继续写更多文章,本人也是初学Linux几个月,

如有不足请各位多多指点。

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章