一、当前目录文件情况,我已把文件清空
二、我现在建立三个 .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几个月,
如有不足请各位多多指点。