【问题标题】:MSVC Find where a symbol is coming fromMSVC 查找符号的来源
【发布时间】:2020-10-18 05:54:34
【问题描述】:

情况:

  • 我正在使用 CI 使用 CMake 和 MSVC 编译我的项目的 Windows 版本
  • 它最后会出错,抱怨两个缺失的符号(__std_system_error_allocate_message__std_system_error_deallocate_message
  • 当我在自己的计算机上复制构建过程时,构建完成正常并且工件运行时没有错误。
  • 在 Google 上搜索这些符号没有任何线索表明它们应该在哪些库中定义。

这导致了我的问题:

  • 是否可以查看 MSVC 链接器在哪里找到特定符号?
  • 我能够找到说明来查看特定库中定义了哪些符号,但是这个项目链接了几十个库,而我目前搜索的那些库没有定义符号。我认为这种方法容易出错,因为我可能会在不知情的情况下错过某个库。

【问题讨论】:

  • 它们是来自 MSVC 标准库实现 (github.com/microsoft/STL/pull/457/files) 的内部符号。检查两台计算机上是否有相同的工具包。并且没有使用来自 GitHub 的正在进行中的 STL。
  • @RichardCritten 我遇到了那个页面,但没有意识到它是标准库的一部分。我原以为该项目会被命名为 msvcrt 或类似的名称。谢谢你的澄清。
  • 考虑项目管理人员的姓名缩写 - Stephan T Lavavej

标签: c++ visual-c++ linker


【解决方案1】:

@Richard Critten 为我指出了正确的道路,问题是由于每个系统上的 MSVC 工具链版本不同。 GitLab 的 CI 运行者是 using build tools version 16.2.3.0,而我使用的是更新的 16.6.1.0。卸载它并从this page 安装 16.2.3 重现了该错误。重新编译我之前使用较新的工具链编译的依赖项,然后解决了两个系统上的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多