链接 GCC 构建的静态库时,MSVC 项目缺少“__popcountdi2”

MSVC project missing "__popcountdi2" when linking against GCC-built static library

我有一个 windows 可执行项目,它 link 是针对使用 GCC 6 (MinGW) 构建的静态库 (.lib) 的。编译时出现如下错误:

LNK2019 unresolved external symbol __popcountdi2 referenced in function ...

由于使用驻留在 libgcc 中的 GCC 内置函数 __builtin_popcount(),符号被 link 编辑。然而,尽管将 -static-libgcc 作为参数添加到 gcc,问题仍然存在。

有没有一种方法可以让我的库 (.lib) 包含 libgcc 的一部分,而不是要求 libgcc 在系统上用于 link 可执行文件?是否有一些方法可以解决必须使用 libgcc 运送库的问题?

__builtin_popcount() 不是我当前使用的唯一内置函数。该库使用了 __builtin_bswap32(),这似乎 运行 没有出现在这个问题中。

我正在使用 GCC 6.1.0。更新至6.2.0;同样的问题。

问题是在 windows 上,当传入 -march=native 时,MinGW (GCC) 没有正确检测当前的 CPU 架构。它正在回退到一个架构不支持 POPCNT 作为本机指令(可能是 i686)。作为测试,-mpopcnt 被添加到构建中并且一切正常。

修复方法是使用 -march= 手动指定体系结构。

此外:这是不是 MingGW 的错误,因为没有正确轮询本机架构?