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

  • 相关阅读:
    线性表——(2)单向链表
    线性表——(1)顺序表
    UVa 1592 数据库
    UVa 12096 集合栈计算机
    Python 协程
    Python 多线程及进程
    Python 日志(Log)
    Python 函数式编程
    Python基础
    DB2 获取前两天的数据
  • 原文地址:https://www.cnblogs.com/ShaneZhang/p/3480437.html
Copyright © 2011-2022 走看看