【问题标题】:Problem statically linking to Botan on Windows using MSVC使用 MSVC 在 Windows 上静态链接到 Botan 的问题
【发布时间】:2010-12-27 13:12:59
【问题描述】:

我正在尝试使用 Windows 上的 MSVC 将我正在构建的 Qt 库静态链接到 Botan,并且收到以下错误。

..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(129) : error C2589: '(' : illegal token on right side of '::'
        ..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(128) : while compiling class template member function 'void Botan::MemoryRegion<T>::copy(const T [],size_t)'
        with
        [
            T=Botan::byte
        ]
        ..\..\3rdparty\temp\botan-msvc\build\include\botan/buf_comp.h(41) : see reference to class template instantiation 'Botan::MemoryRegion<T>' being compiled
        with
        [
            T=Botan::byte
        ]
..\..\3rdparty\temp\botan-msvc\build\include\botan/secmem.h(129) : error C2059: syntax error : '::'

MinGW 不会发生这种情况。当我注释掉所有与 Botan 相关的代码时也会发生这种情况。这是什么意思,我该如何解决 - 为什么 MinGW 不会出现这种情况?

【问题讨论】:

  • 很难从错误信息中分辨出来,需要阅读 Botan 标头才能看到问题所在。为 gcc 编写的代码通常需要修复才能使用 MSVC 构建,尤其是在使用模板时。
  • 确保您包含的 Windows 标头没有定义 min 和 max 宏 - 如果您通过预处理器运行代码,您可能会看到 std::min 被重写为类似 @ 987654322@ 这将与您看到的错误消息相匹配。

标签: qt visual-c++ botan


【解决方案1】:

在 Jack Lloyd 的评论的帮助下,我能够找出问题所在。显然是通过一个路径或另一个#defined“min”包含的东西。我只是未定义它,我的库完美地编译和链接。谢谢杰克!

【讨论】:

    最近更新 更多