我有一个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;同样的问题。
答案 0 :(得分:0)
问题是在Windows上,MinGW(GCC)在传递-march=native
时没有正确检测当前的CPU架构。它回归到一个不支持POPCNT作为本机指令的架构(可能i686的)。作为测试,-mpopcnt
被添加到构建中,一切正常。
修复方法是使用-march=
手动指定架构。
此外:这是MingGW的错误,因为本机架构没有正确轮询吗?