程序显式调用和隐式调用linux动态链接库(*.so)的区别。

来源:互联网 发布:淘宝手机秒杀技巧 编辑:程序博客网 时间:2024/05/18 03:28

        我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要比使用静态库程序的体积小,并且使用动态库的程序在运行时必须依赖所使用的动态库文件(.so文件),而使用静态库的程序一旦编译好,就不再需要依赖的静态库文件了(.a文件)。

        动态库的调用又分为显示和隐式两种方式,区别如下:

        1、 隐式调用需要调用者写的代码量少,调用起来和使用当前项目下的函数一样直接;而显调用则要求程序员在调用时,指明要加载的动态库的名称和要调用的函数名称。

        2、隐式调用由系统加载完成,对程序员透明;显调用由程序员在需要使用时自己加载,不再使用时,自己负责卸载。

        3、由于显调用由程序员负责加载和卸载,好比动态申请内存空间,需要时就申请,不用时立即释放,因此显调用对内存的使用更加合理, 大型项目中应使用显示调用。

        4、当动态链接库中只提供函数接口,而该函数没有封装到类里面时,如果使用显调用的方式,调用方甚至不许要包含动态链接库的头文件(需要调用的函数名是通过dlsym函数的参数指明的),而使用隐式调用时,则调用方不可避免要加上动态库中的头文件,g++编译时还需要要用参数-I指明包含的头文件的位置。需要注意的是,动态链接库中的接口函数是作为成员函数封装在里面时,即使使用显调用的方式,调用方也必须包含动态库中的相应头文件。

        5、显调用更加灵活,可以模拟多态效果。


转自:http://blog.csdn.net/lc_910927/article/details/42393121

阅读全文
0 0