background image

    运用技巧,写个基本框架,很容易就能实现某些公司鼓吹的 dll 编程

    参考文章

    ===========================

    Internet 

 

浏览器用户非常熟悉插件的概念。从 Web 

下载

件,通常这些

插件为浏览器的音频、视频以及特殊效果提供增强支持。一般来讲,在不更改
原有应用程序的情况下,插件为现有应用程序提供新功能。

    DLL 是程序函数,它们在设计和构建应用程序时为该程序所知。设计应用
程序的主程序时使用程序框架或底板,这些程序框架或底板在运行时选择性

 

地装入所需的 dll

 

,这些 dll 位于磁盘上同主程序分离的一些文件中。这一打包

和动态装入提供了灵活的升级、维护、以及许可策略。

      

随 Linux 

 

一起交付的还有几千条命令和应用程序,它们至少都需要 libc 库

 

函数。如果 libc 函数与每一个应用程序都打包在一起,那么磁盘上将会出现几
千个相同函数的副本。Linux 构建这些应用程序,以使用通常所需的系统库的
单个系统级副本,而不浪费磁盘空间。Linux 甚至做得更好,每个需要公共系
统库函数的进程使用单个的系统级内的副本,一次性将该副本装入到内存并
为各进程所共享。

      

在 Linux 

 

中,插件和 dll 以动态库形式实现。本文的余下部分是在应用程序

运行之后使用动态库更改该应用程序的示例。

    Linux 动态链接

    Linux 中的应用程序以以下两种方式之一链接到外部函数:要么在构建时

 

与静态库( lib*.a   

) 静态地链接,并且将库代码包含在该应用程序的可执行

 

文件里;要么在运行时与共享库( lib*.so   

) 动态地链接。通过动态链接装入

器,将动态库映射进应用程序的可执行内存中。在启动应用程序之前,动态链
接装入器将所需的共享目标库映射到应用程序的内存,或者使用系统共享的
目标并为应用程序解析所需的外部引用。现在应用程序就可以运行了。

    

 

作为示例,下面有一个演示 Linux 中对动态链接库的缺省使用的小程序:

    main()

    {

    printf("Hello world

    ");

    }