[C++] 静态链接库和动态链接库的区别
静态链接库和动态链接库的区别
一、静态链接库
预编译->编译->汇编->链接
Linux:
生成目标文件
g++ -c source.cpp -o source.o
打包成静态链接库
ar -crv source.a source.o
使用静态链接库
g++ test.cpp -L静态链接库目录 -l静态链接库名称没有后缀
二、动态链接库
使用动态链接库是为了规避静态链接库的两个问题。
一个是多个副本的问题,对于静态库都是在编译时刻将其编译到源代码当中,在运行时刻不会再和静态库有任何关系。这样的好处是快,但是造成了空间的浪费
另一个是发布的一致性问题和更新问题,如果是静态库,如果对静态库进行了更新,那么需要重新编译代码,并且提示用户进行下载整个软件,这样会造成很多不变,浪费大量带宽。如果是动态库,只需要更新相应的动态链接库即可,整个软件不需要修改。
Linux平台:
生成目标文件
g++ -fPIC source.cpp -o source.o
动态链接库
g++ -shared source.so source.o
或者合并为一个命令
g++ -fPIC -shared source.so source.cpp
关于在使用中定位动态链接库的位置,需要注意一些问题,默认动态链接库是在/lib 或者 /usr/lib之下的
如果要在其他文件夹之下,需要修改 /etc/ld.so.cache文件