【发布时间】:2022-01-19 05:52:39
【问题描述】:
我目前的目标是编译 SQLite 库(C 语言),它使用 MSVC 构建工具与 Windows 上的依赖项静态链接。我想获得一个 DLL 文件,它可能只依赖于核心 Windows/VC 组件,例如 kernel32 或 VC 运行时。 SQLite 库有几个具有外部依赖关系的扩展,例如 Zipfile/zlib 或 ICU/ICU。我想使用 sqlite3.dll 文件中静态链接的所有必要代码启用这些扩展。我可以用动态链接编译它就好了,但它需要单独的 dll 依赖文件,这是我想要避免的。
Micorosoft 有一个基本教程Walkthrough: Create and use a static library,但我没有看到有关如何从 MSVC 构建工具命令行执行此操作的明确说明。我的理解是,要静态链接依赖项,需要一个静态库文件 .lib 。同时,导入库也有 .lib 扩展名。
我有几个问题:
- 如何判断给定的 .lib 文件是导入库还是静态库? (我对具体说明感兴趣,可能涉及一些命令行 MS Build 或 Windows Resource Kit 工具。)
- 在给定单个源文件(例如 SQLite3.c 没有外部依赖项)的情况下,如何从命令行创建静态库与导入库?
- 如果所有依赖项都作为静态库提供,MS 链接器将自动创建静态链接的 dll,这是否正确? (比如说,我在 SQLite 中启用了 Zipfile 扩展,根据上一个问题的说明构建了一个静态 zlib 库,并将其作为 MS Build Tools 链接器的依赖项提供。)或者是否有特殊标志来请求静态链接?
【问题讨论】:
标签: c windows msbuild static-libraries static-linking