动态链接
简单理解就是可执行文件记录库的路径,通过路径找到对应库文件,库文件删除,执行文件不可执行
优点:不占空间
缺点:效率低
linux生成.so文件
gcc -fPIC -shared test.c -o libtest.so
-fPIC 是压制警告
-shared 是生成动态库
test.c 是要编译成库的文件
-o后面 是要生成的文件的名称(lib+name)
linux使用.so文件
gcc -g -o main main.c -ltest -L.
-L. -L后加动态库路径(.代表本地目录)、
-l 后面加库名称(name)
执行文件前会报错“cannot open shared object file: No such file or directory”,执行下面命令把.so库文件的路径写入LD_LIBRARY_PATH
export LD_LIBRARY_PATH=库文件绝对路径:$LD_LIBRARY_PATH
静态链接
可以理解成可执行文件中包含了库代码的一份完整拷贝,之后库文件删除了也能使用
优点:效率高
缺点:占空间
linux生成.a文件
1.编译成.o文件
gcc -c -o test.o test.c
2.ar工具把.o文件打包成.a
ar -r -s -o libtest.a test.o
-s:ranlib
linux使用.so文件
gcc -c -o test.o test.c -ltest -L.
-L. -L后加静态库路径(.代表本地目录)、
-l 后面加库名称(name)