第七章总结图
注意:
1.在Linux系统中,生成动态库时执行的命令:gcc -fPIC -shared -o xxx
其中-shared是表明在装载时进行重定位,-fPIC是表明生成地址无关代码。
2.显示使用动态库的方法:
linux系统中:
调用dlopen(),dlsym(), dlerror(),dlclose()这四个函数进行动态库的显示调用
Windows系统中
在windows中只需要调用dll文件即可,使用LoadLibrary(), GetProcAddress(), FreeLibrary()三个函数,具体可以参考下面博客
https://blog.csdn.net/liangyanghui/article/details/77981848
3.隐式使用动态库
linux在输入指令时加入动态库的库路径,以及在程序中加入动态库的头文件
windows中隐式使用时,头文件、lib文件和dll缺一不可,lib文件可以通过#gragma comment(lib, "xxx")语句在程序中添加,也可以通过配置VS的项目来添加,dll暂时知道的项目的库目录必须包含动态库才可以。
4.在制作动态库时,windows下的动态库函数需要被调用,一定要加__declspec(dllexport),但是linux中使用的动态库不需要加
5.所有的目标文件以及静态库,动态库,linux中都是ELF文件格式,windows中都是PE文件格式。
6.动态库和静态库的区别
加载的时机不一样,动态库是在程序运行时加入,不需要经过编译阶段,所以动态库更改不需要重新编译,静态库是在程序链接时加入的,所以静态库更改以后,需要重新编译。
静态库每次更改都需要复制一次使用到的函数到内存中,动态库则不需要,如果内存中已经存在这个函数了,那就不会复制了,可以节省空间。