MSVC 查找符号的来源
MSVC Find where a symbol is coming from
情况:
- 我正在使用 CI 使用 CMake 和 MSVC Windows 编译我的项目的 Windows 版本
- 最后出错了,抱怨缺少两个符号(
__std_system_error_allocate_message
和 __std_system_error_deallocate_message
)
- 当我在自己的计算机上复制构建过程时,构建顺利完成并且工件 运行 没有错误。
- 在 Google 上搜索这些符号不会产生关于它们应该在哪些库中定义的线索。
这引出了我的问题:
- 是否可以查看 MSVC 链接器在哪里找到特定符号?
- 我能够找到查看特定库中定义了哪些符号的说明,但该项目链接了数十个库,到目前为止我搜索过的库都没有定义符号。我认为这种方法很容易出错,因为我可能会在不知情的情况下错过图书馆。
@Richard Critten 指出了我正确的道路,问题是由于每个系统上的 MSVC 工具链版本不同。 GitLab 的 CI 跑步者 using build tools version 16.2.3.0 while I was using a more recent 16.6.1.0. Uninstalling that and installing 16.2.3 from this page 重现了错误。重新编译我之前用较新的工具链编译的依赖项,然后解决了两个系统上的错误。
情况:
- 我正在使用 CI 使用 CMake 和 MSVC Windows 编译我的项目的 Windows 版本
- 最后出错了,抱怨缺少两个符号(
__std_system_error_allocate_message
和__std_system_error_deallocate_message
) - 当我在自己的计算机上复制构建过程时,构建顺利完成并且工件 运行 没有错误。
- 在 Google 上搜索这些符号不会产生关于它们应该在哪些库中定义的线索。
这引出了我的问题:
- 是否可以查看 MSVC 链接器在哪里找到特定符号?
- 我能够找到查看特定库中定义了哪些符号的说明,但该项目链接了数十个库,到目前为止我搜索过的库都没有定义符号。我认为这种方法很容易出错,因为我可能会在不知情的情况下错过图书馆。
@Richard Critten 指出了我正确的道路,问题是由于每个系统上的 MSVC 工具链版本不同。 GitLab 的 CI 跑步者 using build tools version 16.2.3.0 while I was using a more recent 16.6.1.0. Uninstalling that and installing 16.2.3 from this page 重现了错误。重新编译我之前用较新的工具链编译的依赖项,然后解决了两个系统上的错误。