【Linux下动态库、静态库的发布】
源码准备
add.c sub.c add.h sub.h main.c
静态库制作、使用(.a)
1.生成.o文件
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
2.将.o文件打包生成静态库
ar -rc libsec_static.a add.o sub.o
3.链接静态库
gcc main.c -I 头文件路径 -L 库文件路径 -l 库名称
-I:指定头文件所在路径。
-L:指定库文件所在路径。
-l:指明需要链接库文件路径下的哪一个库(库名称,不带lib前缀,不带.a后缀)
动态库制作、使用(.so)
1.生成.o文件
gcc -fPIC -c add.c -o add.o
gcc -fPIC -c sub.c -o sub.o
-fPIC 生成位置无关代码(编译产生的代码没有绝对位置,只有相对位置);从而可以在任意地方调用生成的动态库
2.将.o文件打包生成静态库
gcc -shared -o 库名称(.so) add.o sub.o
3.链接静态库
export LD_LIBRARY_PATH=库文件所在文件夹路径
echo $LD_LIBRARY_PATH
gcc main.c -I 头文件路径 -L 库文件路径 -l 库名称
-I:指定头文件所在路径。
-L:指定库文件所在路径。
-l:指明需要链接库文件路径下的哪一个库(库名称,不带lib前缀,不带.so后缀)
Makefile
Makefile_s 制作静态库
# $@ target $^all dep $<1st dep
libsec_static.a:add.o sub.o
ar -rc $@ $^
%.o:%.c
gcc -c $<
.PHONY:clean
clean:
rm -rf *.o libsec_static.a output
.PHONY:output
output:
mkdir output
cp -rf *.h output
cp -rf libsec_static.a output
Makefile_s 制作动态库
# export LD_LIBRARY_PATH
libsec_dynamic.so:add.o sub.o
gcc -shared -o $@ $^
%.o:%c
gcc -fPIC -c $<
.PHONY:clean
clean:
rm -rf *.o libsec_dynamic.so output
.PHONY:output
output:
mkdir output
cp -rf *.h output
cp -rf libsec_dynamic.so output
其他相关指令
ldd 可执行程序名
查看该可执行程序的动态库依赖(list dynamic independence)
ar -tv libsec_static.a
查看静态库包含的文件
export LD_LIBRARY_PATH=动态库所在路径
echo $LD_LIBRARY_PATH
配置动态库的搜索路径