您的位置:首页 > 其它

基本概念都知道吗? TAG:lib dll 静态加载 动态加载

2008-07-21 10:41 387 查看
1〉导入库与静态链接库差别:导入库一般与dll一起使用,其中导入库包含编译或链接的信息,调用程序在编译和连接时均可以不需要dll的存在,在运行时,则通过导入库中导入到调用程序的信息,可以找到对应dll(导出对应的接口)文件名,进行外部调用;而静态链接库中,包含了符号信息和程序的二进制部分,并在编译的过程中提供符号定义,以及在链接时提供外部对象(.obj)的链接。动态链接库包含两种加载方式:静态加载时的静态库包含了相应文件PE头中的大部分信息,如FILE   HEADER,OPTIONAL   HEADER等。当link的时候,用来填充EXE文件的PE头,比如在IMAGE_IMPORT_DESCRIPTOR结构中相应dll的名字,引入函数的名字等。当PE   LOADER加载EXE的时候,dll也加载,通过引入表就可以知道相应引入函数的偏移地址并填充EXE的PE头。而动态链接时需要时才加载dll,通过引入函数名字直接搜索dll的引出表,得到相应RVA和Base   Address就可得到相应引入函数的偏移地址

2> 静态库与动态库的使用

a   如果想要讲第三方的源码包含其中的话,又不需要将第三方的代码生成一个独立的库,一般可以采用静态库的方法,这样就不容易暴露信息,呵呵。我的理解

b  静态调用与文件内函数调用一般,调用过程方便,将调用的接口放在一个统一的头文件下就可以了,所以一般项目目录下有include, lib, bin目录源于此。

c 动态链接库与调用程序是独立的,这样就可以很好的做到各自升级,保持接口不变就可以了;

d 静态链接时,每个调用程序均有一份静态库的副本,而动态链接库基本上可以做到共享一份副本,所以节省了空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息