ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

动静态库的制作和使用

2026/8/22 17:30:54 拓冰建站 浏览量
动静态库的制作和使用 一、库库本质上是多个.o文件的集合库就相当于真正的生产车间比如你用的stdio.h这个头文件他就相当于使用说明书。二、静态库的制作与使用2.1 简单制作.a 就是linux中的静态库 就是多个.o文件的集合体ar -rc lib库名.a *.o2.2 使用将需要的头文件使用说明书和.a库拷贝到friend文件夹中gcc -o 可执行文件名字 main.o -l库名 -L./-l 指明库的名字告诉gcc -L 库路径在哪2.3 易错库不能包含main函数2.4 Makefile方法制作静态库1 libmystdio.a:mystdio.o mystring.o 2 ar -rc $ $^ 3 %.o:%.c 4 gcc -c $ 5 6 .PHONY:clean 7 clean: 8 rm -rf *.o *.a mylib 9 .PHONY:output 10 output: 11 mkdir -p mylib 12 mkdir -p mylib/include 13 mkdir -p mylib/lib 14 cp *.h mylib/include 15 cp *.a mylib/libmake之后再 make output这时候我们生成了一个mylib的文件夹 文件夹中include是头文件 lib就是我们生成的库2.5 如何使用该库2.5.1安装到系统中拷贝软链接也可以这样就可以运行了删掉之后就找不到了就失败了2.5.2 使用选项 随意链接任意的库因为我们将系统中删掉了该库和头文件所以是找不到的所以我们编译的时候要去指定头文件在哪这样形成main的可执行文件需要去指定头文件在哪用-I 同时用-L去指定库在哪 -l库的名字三、动态库的打包和使用同时用Makefile也可以1 libmystdio.so:mystdio.o mystring.o 2 gcc -shared -o $ $^ 3 %.o:%.c 4 gcc -fPIC -c $ 5 6 .PHONY:clean 7 clean: 8 rm -rf *.o *.so mylib 9 .PHONY:output 10 output: 11 mkdir -p mylib 12 mkdir -p mylib/include 13 mkdir -p mylib/lib 14 cp *.h mylib/include 15 cp *.so mylib/lib细节形成动态库不用ar而是继续使用gcc/g动态库上面的使用和静态库一样 但是运行的时候并没有成功 我们ldd这个发现燃事故 not found但是我们上述已经告诉gcc了那为什么找不到呢运行这个程序的时候是操作系统加载器找不到但是我们写的时候是告诉了gcc运行程序的时候和gcc没有任何关系了第一种解决方法将库拷贝到系统中lib64中下第二种做法使用软链接第三种做法通过环境变量通过LD_LIBRARY_PATH这个环境变量第四种做法ldconfig方案四、混淆1 如果我给的mylib的lib中既有.a又有.so那优先是动态链接2 如果给的是静态库 没有加-static 只有这个库是静态链接其他的还是动态链接3 如果加了-static 所有库都要用静态连接