Windows上的动态库(dll)加载方式有两种:
1.静态加载,运用#pargma comment(lib, "xxx.dll")方式,这种方式需要 头文件,lib文件和dll文件配合使用,运行时是直接将动态库加载到内存中的,运用起来也比较方便
2.动态加载,运用LoadLibrary(dllName)方式,这种方式只需要头文件和dll文件就可以运行,需要时加载,不需要是用FreeLibrary(dllName)进行释放。
Linux系上的动态库(so)加载方式也有两种:
1.静态加载,程序编译的时候加上“-l”选项,指定其所依赖的动态库,动态库的生存周期等于进程的生存周期,其加载时机不灵活,但是运用方式,可以直接调用
2.动态加载,主程序编译时候要加入 -ldl (指定dl库),要生成动态库编译需要加入-shared -fPIC,用dlopen()函数以指定模式打开指定的动态连接库文件,并返回一个句柄给调用进程。使用dlclose()来卸载打开的库。能够确保多个进程调用时内存中只存在一份,共享库计数会根据调用的多少递加1。标志指明是否立刻计算库的依赖性。如果设置为 RTLD_NOW 的话,则立刻计算;如果设置的是 RTLD_LAZY,则在需要的时候才计算。
另外:如果是动态加载动态库,则Linux下用ldd来查看程序依赖时,是不列出动态库的,因为他是随用随加载的,但是如果用的是静态加载动态库,怎在Linux下用ldd来查看程序依赖时,会列出所依赖的动态库。
Mac OS X系统下查看程序依赖用otool命令,otool -L main;列表main所依赖的库,如果main动态加载了动态库,则不会列表。