zoukankan      html  css  js  c++  java
  • 动态链接库与静态链接库

    .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

  • 相关阅读:
    命令行颜色换算器(基于python)
    VPS常用操作(自用)
    自动读取虚拟币ETC行情并语音提醒的小工具(mac OSX)
    nginx最基本操作
    一个平庸程序员的自白
    unity 2d游戏 按y坐标排序子对象
    开源输入法推荐
    unity插件,从一段文字中提取中文并去重
    考试总结(CE???)
    螺旋矩阵
  • 原文地址:https://www.cnblogs.com/ShaneZhang/p/3480437.html
Copyright © 2011-2022 走看看