VC++ 指定库顺序 - 错误 LNK2005:已定义

VC++ specify library order - error LNK2005: already defined

我正在将整个 Visual Studio 解决方案从 wxWidgets-2.6.4 (A) 升级到 wxWidgets-3.0.2 (B)。有一个问题是因为一些项目使用了 wxhttpengine-2.0 (Z),它不适用于高于 2.6.x 的 wxWidgets 版本。为了简化问题,我用字母 A、B 和 Z 标记了 3 个静态库。因此,我的解决方案包含 A 和 Z,Z 包含 A 的部分,但我想在维护 Z 的同时使用 B 而不是 A,以便简化我的解决方案的代码。问题是简单地这样做会导致错误 - LNK2005: already defined in httpengine.lib - for wxWidgets.3.0.2 static libraries。 linker 发现了来自 A 和 B 的冲突符号,因为 Z 建立在 A 之上。

一般问题:如何将包含 Z 的项目从 A 升级到 B?

具体问题:是否可以在Visual Studio中指定我想link先用B再用Z?

这是一个示例错误:

Error 1 error LNK2005: "public: class wxSize __thiscall wxWindowBase::GetBestSize(void)const " (?GetBestSize@wxWindowBase@@QBE?AVwxSize@@XZ) already defined in httpengined.lib(proxysettingsdlg.obj) PATH\wxmsw30ud_core.lib(hidden_filename.obj)

您不能静态地 link 使用两个不同版本的 wxWidgets。你能做的最好的事情是 link 动态地至少使用一个,并且为了避免混淆,最好同时使用两个。

但是我实际上正在研究为什么 wxhtttpengine 不能与 wxWidgets 3.0 一起工作。解决这个问题应该不难,使用单一版本的库显然要简单得多。