如何正确构建和 link shaderc_combined.lib

How to correctly build and link shaderc_combined.lib

我正在努力编译 and/or linking shaderc library。我需要它用于计算机图形课程的 vulkan 光线跟踪框架。

设置

因为这个应该给学生使用,所以我想把一切都保持得井井有条,所以我的解决方案中有两个项目:

  1. Lib,实际框架。这取决于 glfw3.libvulkan-1.libshaderc_combined.lib
  2. App,这是学生们可以玩弄框架的地方,也是启动项目。它依赖于 Lib

我使用 cmake 和 Visual Studio 2019 从源代码构建库,如下所示:

mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A x64
cmake . --build --config Debug

错误

我现在不想 link shaderc_combined.lib 到我的项目 Lib,但是出现以下两个错误(实际上,对于不同的 .obj,我多次出现这两个错误文件):

1>Lib.lib(shaderc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in main.obj
1>Lib.lib(shaderc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MD_DynamicRelease' in main.obj

我是怎么理解的:

  1. 第一个错误告诉我,shaderc_combined.lib 出于某种原因(如 this question 中所述)以发布模式构建

  2. 第二个错误的意思是,我认为,shaderc_combined.lib links 到另一个版本的 运行time 库。 (如Microsoft docs中所述,虽然我没有完全理解)

如果我对这些错误的理解有误,请更正我。

我的问题

  1. 如何在“真实”调试模式下编译 shaderc_combined.lib? (不能总是在 Release 模式下构建)
  2. 当我将 /MDd 更改为 /MTd 时,我 运行 会不会遇到更多麻烦?我完全不明白这两个选项之间的区别。

最好在不手动编辑 Makefile 或 cmake 生成的构建文件的情况下实现这两者,因为这会使其他人更难编译我的项目。

在此先致谢,欢迎随时纠正拼写错误:)

所以,由于评论的提示,问题或多或少地解决了。

  1. 我再次检查了我的链接器设置,结果我只是混淆了所需库的路径。
  2. 可以 运行 在 shaderc 上使用 -DSHADERC_ENABLE_SHARED_CRT=ON cmake 强制 shaderc 使用 /MD 而不是 /MT 然后一些示例不再编译,但其余的工作正常。