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

时间:2014-02-19 14:06:20

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

我正在构建SDL2静态库。要在我的程序中使用它,我必须链接(静态)SDL2.lib,还有winmm.lib,imm32.lib,version.lib,我假设它是某些Windows DLL的存根。我的主要目标是创建这样一个静态SDL2版本,这样我的程序就不必与其他3个.libs链接。我想拥有静态库中所需的所有符号,因此我必须仅使用SDL2.lib链接exe。我正在使用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链接到它时,我得到了一些未解析的符号(可能来自那些被删除的.libs)。

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

1 个答案:

答案 0 :(得分:0)

似乎这些符号未在SDL2.lib中使用,但在您的main中使用。这就是为什么你必须将这3个文件与你的主文件链接起来,而不是采用快捷方式。