动态链接库与静态链接库

.h文件主要是提供函数签名原型
至于函数的实现有两种库:动态库:dll 静态库: lib

当使用动态库dll的时候,有两种情况
1,只有dll而没有.h和.lib而有api文档的情况下,可以通过LoadLibrary动态加载dll,并通过GetProcAddress来获取函数地址并使用。
2,有dll,有.h,有lib的话,在编译选项里正确链接lib,并在代码头文件中includ .h文件即可使用
其中dll存储了函数具体的执行代码和资源,.h文件给出了函数的原型,.lib文件给出了函数在dll中的内存偏移地址。使用时dll与exe文件在同一目录即可

注意的是:此时的lib是导出文件,而不是静态库
而只有dll,没有.h .lib也没有文档,只有hack出函数接口和dll导出的lib了。

当使用静态库lib的时候,这个lib是包含了函数的执行代码的
只需要include h文件并在编译选项里正确链接lib即可。

 

dll库里面放api函数,比如loadlibrary,exitprocess等等
lib文件是静态库,顾名思义,就是在link的时候要放进exe里面去的东西,为嘛dll都已经加载入内存了,link的时候还要lib的信息呢,因为我的exe要调用的api在内存中的位置不确定,而lib库就是为确定api在内存中的位置服务的

 

 

linux 对应的有.so文件和.a文件

但是so对应于dll,是共享连接库,不过他不像dll需要编译时相应的lib
.a文件对应于lib,是静态连接库

windows把东西分割的很细,动态链接库是作为运行时共享库用,但他可能不包括关于编译的链接期所需的那些链接信息。而lib是编译的链接期所必需的,需要提供给链接器一些符号,不然会报错找不到符号某个符号在×××地方被引用。

 

原帖地址:http://bbs.csdn.net/topics/370092728?page=1#post-395396640

你可能感兴趣的:(静态)