• 动态链接库与静态链接库


    .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

  • 相关阅读:
    Java线程
    腾讯2012.9.23校园招聘笔试题
    腾讯2011.10.15校园招聘笔试题
    腾讯2013年实习生笔试题目
    腾讯2012.4.25实习生招聘笔试题(2)
    腾讯2012.4.25实习生招聘笔试题
    优酷土豆2012.9.12校园招聘笔试题
    谷歌面试题:在半径为1的圆中随机选取一点
    Reservoir Sampling
    微软面试15道
  • 原文地址:https://www.cnblogs.com/ShaneZhang/p/3480437.html
Copyright © 2020-2023  润新知