Linux下静态库与动态库的制作

静态库

静态库:库名命名方式:libxxx.a,lib静态库的前缀,xxx表示静态库的名称,.a是静态库后缀。

静态库一般放在目录 /lib 或 /usr/lib

静态库制作过程:

(1)file.c 文件生成目标文件file.o目标文件

gcc -c -o file.o file.c //参数c是制作目标文件,o是指定生成文件名称

(2)制作静态库:使用ar命令把file.o文件制作成静态库libfile.a

ar -cr -o libfile.a file.o //参数c是create产生,参数r是当库中存在同名模块file.o时,覆盖file.o。

(3)使用静态库,方式:gcc -o mian main.c -L路径 -l库名。

例如:gcc -o mian main.c -L. -lfile //-L.表示静态库的路径为当前目录,.lflie表示使用的静态库名为file,即库libfile.a


动态库

动态库:库名命名方式:libxxx.so,lib动态库的前缀,xxx表示动态库的名称,.so是动态库后缀。

动态库一般放在目录 /lib 或 /usr/lib

动态库制作步骤:

(1)file.c 文件生成目标文件file.o目标文件

gcc -c -o file.o file.c //参数c是制作目标文件,o是指定生成文件名称

(2)生成动态库:gcc -shared -fpic -o libfile.so file.o

-shared:生成共享库 -fpic:动态库产生,与代码位置无关

(3)使用动态库,方式: gcc -o mian.c -L路径 -l库名

例如:gcc -o out mian.c -L. -lfile,注意此时还不能立即使用生成的可执行文件out,即不能./out,因为在使用动态库时,会查找/usr/lib /lib目录下的动态库,而此时我们的动态库没有放在里面。

解决方法一:把我们的动态库放在/usr/lib或/lib。

解决方法二:把动态库的路径放在环境变量LD_LIBRARY_PATH中,假设我们动态库在目录/home/file/中,则例如:export LD_LIBRARY_PATH =/home/file/

解决方法三:把我们动态库所在目录的路径,放在配置脚本中/etc/ld.so.conf中,最后使用/sbin/ldconfig运行修改完的配置脚本。

例如vi /etc/ld.so.conf,打开配置脚步,输入我们动态库所在目录的路径。

运行修改完的配置脚本:ldconfig /etc/ld.so.conf

经验分享 程序员 微信小程序 职场和发展