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