我有一个 Windows 可执行项目,它链接到使用 GCC 6 (MinGW) 构建的静态库 (.lib)。编译时出现如下错误:
LNK2019 unresolved external symbol __popcountdi2 referenced in function ...
由于使用驻留在 libgcc 中的 GCC 内置函数 __builtin_popcount()
,符号被链接进来。然而,尽管将 -static-libgcc
添加为 gcc 的参数,问题仍然存在。
有没有办法让我的库 (.lib) 包含 libgcc 的一部分,而不是要求 libgcc 存在于系统上以便可执行文件链接?有什么办法可以解决必须使用 libgcc 运送库的问题吗?
__builtin_popcount()
不是我目前使用的唯一内置函数。该库使用了 __builtin_bswap32()
,它似乎没有遇到这个问题。
我正在使用 GCC 6.1.0。更新至6.2.0;同样的问题。
最佳答案
问题是在 Windows 上,当传入 -march=native
时,MinGW (GCC) 没有正确检测当前的 CPU 架构。它退回到不支持 POPCNT 的架构作为 native 指令(可能是 i686)。作为测试,-mpopcnt
被添加到构建中并且一切正常。
修复方法是使用 -march=
手动指定架构。
此外:由于未正确轮询 native 架构,这是 MingGW 的错误吗?
关于c - 链接 GCC 构建的静态库时,MSVC 项目缺少 "__popcountdi2",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40350556/