C++ 如何正确构建和链接shaderc_combined.lib

C++ 如何正确构建和链接shaderc_combined.lib,c++,visual-studio,cmake,vulkan,C++,Visual Studio,Cmake,Vulkan,我正在努力编译和/或链接。我需要它的光线跟踪框架与vulkan的计算机图形课程 安装程序 因为这应该由学生使用,所以我想保持一切整洁有序,所以我的解决方案中有两个项目: Lib,实际的框架。它取决于glfw3.lib、vulkan-1.lib和shaderc\u combined.lib App,学生们可以在这里玩弄这个框架,这是一个启动项目。它依赖于Lib 我使用cmake和Visual Studio 2019从源代码构建库,如下所示: mkdir build cd build cmake .

我正在努力编译和/或链接。我需要它的光线跟踪框架与vulkan的计算机图形课程

安装程序 因为这应该由学生使用,所以我想保持一切整洁有序,所以我的解决方案中有两个项目:

  • Lib
    ,实际的框架。它取决于
    glfw3.lib
    vulkan-1.lib
    shaderc\u combined.lib
  • App
    ,学生们可以在这里玩弄这个框架,这是一个启动项目。它依赖于
    Lib
  • 我使用cmake和Visual Studio 2019从源代码构建库,如下所示:

    mkdir build
    cd build
    cmake .. -G "Visual Studio 16 2019" -A x64
    cmake . --build --config Debug
    
    错误 现在,我不想将
    shaderc\u combined.lib
    链接到我的项目
    lib
    ,但会出现以下两个错误(实际上,对于不同的.obj文件,我会多次出现这两个错误):

    我的理解是:
  • 第一个错误告诉我,出于某种原因(如中所述),shaderc_combined.lib是在发布模式下构建的

  • 我认为,第二个错误意味着shaderc_combined.lib链接到另一个版本的运行库。(如中所述,尽管我不完全理解)

  • 如果我对这些错误的理解是错误的,请纠正我

    我的问题
  • 如何在“real”调试模式下编译shaderc_combined.lib?(始终以释放模式构建是不可接受的)
  • 当我将/MDd更改为/MTd时会遇到更多的麻烦吗?我不完全理解这两种选择之间的区别
  • 最好两者都可以实现,而无需手动编辑Makefile或由cmake生成的构建文件,因为这会使其他人更难编译我的项目


    提前感谢,请随意更正拼写错误:)

    因此,多亏了评论中的提示,这个问题或多或少地解决了

  • 我再次检查了链接器设置,结果发现我只是混淆了所需库的路径
  • 可以使用
    -DSHADERC\u ENABLE\u SHARED\u CRT=on
    在shaderc上运行cmake,以强制shaderc使用/MD而不是/MT,然后一些示例不再编译,但其他示例可以正常工作

  • 事实上,情况正好相反——您的主项目似乎是在发布模式下编译的。谢谢,这会解释很多。也许我把两个图书馆搞混了。我会检查的。谢谢@VTT,我再次检查了我的链接器设置,现在可以工作了。
    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