在 Windows 上使用 MSVC 构建工具创建静态库和静态链接

Creating static libraries and static linking with MSVC Build Tools on Windows

我目前的目标是编译 SQLite 库(C 语言),静态 linked 依赖于 Windows 和 MSVC 构建工具。我想获得一个 DLL 文件,它可能只依赖于核心 Windows/VC 组件,例如 kernel32 或 VC 运行时。 SQLite 库有几个具有外部依赖性的扩展,例如 Zipfile/zlib 或 ICU/ICU。我想在 sqlite3.dll 文件中静态 linked 启用所有必要代码的这些扩展。我可以用动态 linking 编译它就好了,但它需要单独的 dll 依赖文件,这是我想避免的。

Microsoft 有基本教程 Walkthrough: Create and use a static library,但我没有从 MSVC Build Tools 命令行中看到关于如何操作的明确说明。我的理解是,对于 link 静态依赖,静态库文件 .lib 是必需的。同时导入库也有.lib扩展名。

我有几个问题:

好的,经过进一步探索,我似乎找到了答案。

第一个问题是在 here, and there is an interesting comment related to libraries created with MinGW ( 更相关的 MinGW 相关问题之前在这里提出的)。有几个选项,最简单的似乎是 lib /list sqlite3.lib,它应该列出静态库的对象并且不为导入库生成任何输出。

第二个问题的答案由Misrosoft给出,说明
LIB 的默认模式是构建或修改 COFF 对象库。当您未指定 /EXTRACT(将对象复制到文件)或 /DEF(构建导入库)时,此模式下的 LIB 运行s。

第三个问题在here之前讨论过,看来答案是“是”。想一想,静态库应该包含实际对象,而不包含有关 DLL 的信息(可以独立创建)。 lib 文件不适合在 运行 时间使用,因此成功链接静态库的唯一可能性应该是静态模式。