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

时间:2016-10-31 21:05:14

标签: c gcc visual-c++ mingw static-libraries

我有一个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;同样的问题。

1 个答案:

答案 0 :(得分:0)

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

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

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