【问题标题】:Static library linked with other libs - LINKER warning与其他库链接的静态库 - LINKER 警告
【发布时间】: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


【解决方案1】:

这些符号似乎没有在 SDL2.lib 中使用,但在您的 main 中使用。这就是为什么你必须将这 3 个文件与你的主文件链接,而不是走捷径。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多