静态库与共享库

                                    静态库与共享库

静态库与共享库的区别:
1.静态库使用发生在静态链接共享库发生在动态链接。
2.静态库.a在linux为后缀,静态库的代码是完全在静态链接的时候拷贝的,因此代码量比较大。动态库是在运行时候才加载
到内存当中的,如果动态库创建时候使用-fPIC那么内存中只有一份代码。
3.静态库不利于维护,而共享库利于维护,因为我们的共享库在如linux的可执行ELF文件中只有我们要调用的库的地址,我们
可以更新共享库,不影响程序执行。同理静态库修改便需要源程序的重新编译链接。
4.在linux中我们编译源文件的时候一定要带上文件的路径。否则系统会在bin或者usr/lib下寻找。如果我们没有拷贝到这些
底下一定要写路径。
Linux相关命令:
1.静态库linux命令
静态库由源文件编译成一堆.o ar命令就是将.o文件集合转换成.a
ar crv libfoo.a add.o max.o    ar可以创建修改静态库(可调用man查看ar)r是增加成源文件c是创建一个库 静态库分前缀lib+文件名+.a(后缀名)
gcc -o main mian.c -L路径 -l文件名
2.共享库linux命令
gcc -shared -fPIC -o libfoo.so add.o max.o     建立共享文件库  加载fPIC编译器选项 和shared
gcc -o main mian.c -L路径 -l文件名
ldd+可执行文件    看当前可执行程序使用了那些共享库
必须要将它拷贝到lib文件底下才行,不拷贝就要修改环境变量。
(加上fPIC是为了让我们进程在执行的时候不用把这些磁盘代码赋值到内存当中直接复制一份PLT表就可以了,里面
就是各个函数的地址。所以,在编译共享库时是必须加上-fPIC的选项的,否则共享库省下的仅仅是硬盘上的空间,
而没有省下内存)

猜你喜欢

转载自blog.csdn.net/qq_41784469/article/details/80784992