【问题标题】:MSVC project missing "__popcountdi2" when linking against GCC-built static libraryMSVC 项目在链接到 GCC 构建的静态库时缺少“__popcountdi2”
【发布时间】:2016-10-31 21:05:14
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多