链接 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 的错误,因为没有正确轮询本机架构?
我有一个 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 的错误,因为没有正确轮询本机架构?