【问题标题】:VC++ specify library order - error LNK2005: already definedVC++ 指定库顺序 - 错误 LNK2005:已定义
【发布时间】:2015-05-18 14:42:27
【问题描述】:

我正在将整个 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: "public: class wxSize __thiscall wxWindowBase::GetBestSize(void)const " (?GetBestSize@wxWindowBase@@QBE?AVwxSize@@XZ) 已经定义在 httpengined.lib(proxysettingsdlg.obj) PATH\wxmsw30ud_core.lib(hidden_​​filename.obj)

【问题讨论】:

    标签: visual-studio visual-c++ static-libraries wxwidgets upgrade


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。这个想法是基于静态库创建 1 个大型可执行文件。我将尝试看看是否可以在使用带有静态库的新版本时动态链接旧的 wxWidgets。另外,我考虑升级 wxhttpengine,但想在此之前搜索替代解决方案。
    猜你喜欢
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2010-10-11
    • 2015-08-10
    • 1970-01-01
    • 2014-12-21
    相关资源
    最近更新 更多