c++ - 与其他库链接的静态库 - LINKER 警告

标签 c++ visual-studio visual-studio-2012 linker sdl

我正在构建 SDL2 静态库。要在我的程序中使用它,我必须链接到(静态)SDL2.lib,而且还要链接到 winmm.lib、imm32.lib、version.lib,我认为它们是某些 Windows DLL 的 stub 。我的主要目标是创建这样一个版本的静态 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 中删除了这两个库并重新编译了 SDL2.lib。现在,当我将我的 exe 链接到它时,我得到了一些未解析的符号(可能来自那些 2 个已删除的 .lib)。

有人可以向我解释这些警告的含义吗?以及如何避免它们?

最佳答案

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

关于c++ - 与其他库链接的静态库 - LINKER 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21882867/

相关文章:

c++ - 顶点缓冲区数据的内存管理

c++ - PeekMessage 没有收到消息?

visual-studio - '[some_platform, 0]' 在 Visual Studio 中是什么意思?

visual-studio-2012 - 使用不同的设置启动 Visual Studio

c++ - 未解析的外部静态变量

c++ - 控制台/终端中的彩色文本

c++ - 多次更新同一个变量

visual-studio - 将 TFS checkin 策略限制为特定用户

c# - 如何在 WIX 的安装标题中显示版本号?

c++ - Visual Studio 2012 原生 C++ DLL x86 编译