如何正确构建和 link shaderc_combined.lib
How to correctly build and link shaderc_combined.lib
我正在努力编译 and/or linking shaderc library。我需要它用于计算机图形课程的 vulkan 光线跟踪框架。
设置
因为这个应该给学生使用,所以我想把一切都保持得井井有条,所以我的解决方案中有两个项目:
Lib
,实际框架。这取决于 glfw3.lib
、vulkan-1.lib
和 shaderc_combined.lib
。
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
我是怎么理解的:
第一个错误告诉我,shaderc_combined.lib 出于某种原因(如 this question 中所述)以发布模式构建
第二个错误的意思是,我认为,shaderc_combined.lib links 到另一个版本的 运行time 库。 (如Microsoft docs中所述,虽然我没有完全理解)
如果我对这些错误的理解有误,请更正我。
我的问题
- 如何在“真实”调试模式下编译 shaderc_combined.lib? (不能总是在 Release 模式下构建)
- 当我将 /MDd 更改为 /MTd 时,我 运行 会不会遇到更多麻烦?我完全不明白这两个选项之间的区别。
最好在不手动编辑 Makefile 或 cmake 生成的构建文件的情况下实现这两者,因为这会使其他人更难编译我的项目。
在此先致谢,欢迎随时纠正拼写错误:)
所以,由于评论的提示,问题或多或少地解决了。
- 我再次检查了我的链接器设置,结果我只是混淆了所需库的路径。
- 可以 运行 在 shaderc 上使用
-DSHADERC_ENABLE_SHARED_CRT=ON
cmake 强制 shaderc 使用 /MD 而不是 /MT 然后一些示例不再编译,但其余的工作正常。
我正在努力编译 and/or linking shaderc library。我需要它用于计算机图形课程的 vulkan 光线跟踪框架。
设置
因为这个应该给学生使用,所以我想把一切都保持得井井有条,所以我的解决方案中有两个项目:
Lib
,实际框架。这取决于glfw3.lib
、vulkan-1.lib
和shaderc_combined.lib
。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
我是怎么理解的:
第一个错误告诉我,shaderc_combined.lib 出于某种原因(如 this question 中所述)以发布模式构建
第二个错误的意思是,我认为,shaderc_combined.lib links 到另一个版本的 运行time 库。 (如Microsoft docs中所述,虽然我没有完全理解)
如果我对这些错误的理解有误,请更正我。
我的问题
- 如何在“真实”调试模式下编译 shaderc_combined.lib? (不能总是在 Release 模式下构建)
- 当我将 /MDd 更改为 /MTd 时,我 运行 会不会遇到更多麻烦?我完全不明白这两个选项之间的区别。
最好在不手动编辑 Makefile 或 cmake 生成的构建文件的情况下实现这两者,因为这会使其他人更难编译我的项目。
在此先致谢,欢迎随时纠正拼写错误:)
所以,由于评论的提示,问题或多或少地解决了。
- 我再次检查了我的链接器设置,结果我只是混淆了所需库的路径。
- 可以 运行 在 shaderc 上使用
-DSHADERC_ENABLE_SHARED_CRT=ON
cmake 强制 shaderc 使用 /MD 而不是 /MT 然后一些示例不再编译,但其余的工作正常。