我注意到以下关于我使用的库:
我打开了库的 .sln (解决方案)文件(它是开源的),并在其项目属性中看到以下内容:
我的困惑是:
请注意,我知道Linux世界中静态库和动态库之间的区别。
答案 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映像。