【发布时间】:2014-03-19 22:10:30
【问题描述】:
我正在构建 SDL2 静态库。要在我的程序中使用它,我必须与(静态)SDL2.lib 链接,还必须与 winmm.lib、imm32.lib、version.lib 链接,我认为它们是某些 Windows DLL 的存根。我的主要目标是创建这样一个静态 SDL2 版本,这样我的程序就不必与其他 3 个 .lib 链接。我想拥有静态库中所需的所有符号,因此我必须仅将 exe 与 SDL2.lib 链接。我正在使用 MS VS2012。我有在构建静态 SDL2.lib 时使用 Librarian 的想法,所以我将其他 3 个库添加到 Librarian/Additional Dependencies。这就像一个魅力。我的 exe 必须仅与 SDL2.lib 链接。
但是当链接 .lib 时,我收到了警告:
warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library imm32.lib(IMM32.dll) SDL2main
warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library version.lib(VERSION.dll) SDL2main
现在我的想法是:imm32.lib 和 version.lib 不定义任何以前未定义的(在 SDL2.lib 中)符号。所以不需要它们,因为 SDL2.lib 中的所有符号都可以解析。所以我从 Librarian 中删除了这 2 个库并重新编译了 SDL2.lib。现在,当我将我的 exe 链接到它时,我得到了一些未解析的符号(可能来自那些已删除的 2 个 .libs)。
有人可以向我解释这些警告的含义吗?以及如何避免它们?
【问题讨论】:
-
肯定错了,静态库不应该包含任何 SDK库。当然不是任何它不需要的,比如 imm32 和版本。它们应该由实际使用该库的任何项目链接。 可能需要它们。但 SDL 推出了各种有问题的特技,最好忽略它,否则您可能会被项目文档弄糊涂。
标签: c++ visual-studio visual-studio-2012 linker sdl