Visual C ++:什么是动态链接的.lib文件?

时间:2010-02-12 11:40:55

标签: windows visual-c++ libraries

我注意到以下关于我使用的库:

  • 将库编译为 .lib 文件。
  • 我的代码需要编译为多线程(调试)DLL 以链接到此库。

我打开了库的 .sln (解决方案)文件(它是开源的),并在其项目属性中看到以下内容:

  1. 运行时库选项设置为多线程(调试)DLL
  2. 配置类型设置为静态库(.lib)
  3. 我的困惑是:

    1. 上面的库选项中是否存在冲突? (静态库说一个选项,DLL说另一个选项)
    2. 什么样的动物 .lib 动态关联?它与 DLL
    3. 的区别如何?

      请注意,我知道Linux世界中静态库和动态库之间的区别。

3 个答案:

答案 0 :(得分:2)

“RunTime Library”选项与您的库无关。它告诉编译器您将在运行时从MSVCRTxx.DLL导入函数。

“配置类型”选项确实引用您的库,因此独立于“RunTime Library”选项。

答案 1 :(得分:1)

我不知道配置不匹配,但使用.DLL库创建的.LIB文件是“导出库” - 它不包含任何代码,只包含可调用函数和对象的名称在DLL中。链接器使用它来满足链接时的引用,这些引用最终通过动态加载在运行时解析。

答案 2 :(得分:1)

Windows DLL可以使用LoadLibrary(或LoadLibraryEx)API动态加载,但是您必须使用GetProcAddress或GetProcAddressEx查找每个导出的函数并将其绑定到函数指针。你最好像往常一样正确地获得功能签名,或者说Bad Things会发生。

LIB文件允许Windows在启动EXE时为您执行所有操作(包括查找要使用的DLL,并递归加载相关DLL),在运行时静态链接动态库,同时避免使用EXE文件膨胀可执行代码,并允许多个进程在内存中共享相同的DLL映像。