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



我正在将整个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:已经在httpengine.lib中定义 - 用于wxWidgets.3.0.2静态库。链接器会发现来自 A 和 B 的冲突符号,因为 Z 是在 A 之上构建的。

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

具体问题:是否可以在Visual Studio中指定我想先与B链接,然后再与Z链接?

下面是一个示例错误:

错误

1 错误 LNK2005:"公共:类 wxSize __thiscall wxWindowBase::GetBestSize(void)const " (?GetBestSize@wxWindowBase@@QBE?AVwxSize@@XZ) 已在 中定义 httpengined.lib(proxysettingsdlg.obj) PATH\wxmsw30ud_core.lib(hidden_filename.obj)

您不能静态链接到两个不同版本的 wxWidgets。你能做的最好的事情就是动态地链接到至少一个,为了避免混淆,可能最好与它们中的两个

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

最新更新