材料准备:fun1.c fun2.c head.h main.c
fun1.c
1 #include2 void fun1() 3 { 4 printf("this is fun1n"); 5 }
fun2.c
1 #include2 void fun2() 3 { 4 printf("this is fun2n"); 5 }
head.h
1 void fun1(); 2 void fun2();
main.c(需要引入head.h文件)
1 #include2 #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命令查看是否是否有自己配的环境变量了



