[3.0] Can't build vulkan. Topic is solved

Discussion area about developing with Ogre-Next (2.1, 2.2 and beyond)


przemir
Halfling
Posts: 68
Joined: Sun May 11, 2014 7:55 pm
Location: Poland
x 21

[3.0] Can't build vulkan.

Post by przemir »

Hi! I try to build newest (version from 12 january 2023) Ogre-next with Vulkan renderer.
System: Windows 10
Build: Release 32bit

I got such linker error during build:

Code: Select all

[ 99%] Linking CXX shared library ..\..\bin\RenderSystem_Vulkan.dll
LINK: command "C:\PROGRA~2\MICROS~1.0\VC\bin\link.exe /nologo @CMakeFiles\RenderSystem_Vulkan.dir\objects1.rsp /out:..\..\bin\RenderSystem_Vulkan.dll /implib:..\..\lib\RenderSystem_Vulkan.lib /pdb:D:\Repos\Forks\ogre-next-build\msvc2015_x86_release\bin\RenderSystem_Vulkan.pdb /dll /version:3.0 /machine:X86 /INCREMENTAL:NO ..\..\lib\OgreMain.lib C:\VulkanSDK\1.3.236.0\Lib32\vulkan-1.lib C:\VulkanSDK\1.3.236.0\Lib32\shaderc_combined.lib D:\Repos\Forks\ogre-next-deps-build\msvc2015_x86_release\ogredeps\lib\Release\FreeImage.lib D:\Repos\Forks\ogre-next-deps-build\msvc2015_x86_release\ogredeps\lib\Release\zziplib.lib D:\Repos\Forks\ogre-next-deps-build\msvc2015_x86_release\ogredeps\lib\Release\zlib.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:..\..\bin\RenderSystem_Vulkan.dll.manifest" failed (exit code 1120) with the following output:
   Creating library ..\..\lib\RenderSystem_Vulkan.lib and object ..\..\lib\RenderSystem_Vulkan.exp
shaderc_combined.lib(validate_decorations.obj) : error LNK2019: unresolved external symbol ___std_reverse_trivially_swappable_8 referenced in function "void __cdecl std::_Buffered_inplace_merge_divide_and_conquer2<struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,class <lambda_19b221d05b429ea8871b3658691ee31d> >(struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,int,int,struct `enum spv_result_t __cdecl spvtools::val::A0x470bef9a::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair * const,int,class <lambda_19b221d05b429ea8871b3658691ee31d>,struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,struct `enum spv_result_t __cdecl spvtools::val::`anonymous namespace'::checkLayout(unsigned int,char const *,char const *,bool,bool,unsigned int,class std::unordered_map<struct std::pair<unsigned int,unsigned int>,struct spvtools::val::`anonymous namespace'::LayoutConstraints,struct spvtools::val::A0x470bef9a::PairHash,struct std::equal_to<struct std::pair<unsigned int,unsigned int> >,class std::allocator<struct std::pair<struct std::pair<unsigned int,unsigned int> const ,struct spvtools::val::`anonymous namespace'::LayoutConstraints> > > &,class spvtools::val::ValidationState_t &)'::`2'::MemberOffsetPair *,int,int)" (??$_Buffered_inplace_merge_divide_and_conquer2@PAUMemberOffsetPair@?1??checkLayout@?A0x470bef9a@val@spvtools@@YA?AW4spv_result_t@@IPBD0_N1IAAV?$unordered_map@U?$pair@II@std@@ULayoutConstraints@?A0x470bef9a@val@spvtools@@UPairHash@456@U?$equal_to@U?$pair@II@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@II@std@@ULayoutConstraints@?A0x470bef9a@val@spvtools@@@std@@@2@@std@@AAVValidationState_t@45@@Z@V<lambda_19b221d05b429ea8871b3658691ee31d>@@@std@@YAXPAUMemberOffsetPair@?1??checkLayout@?A0x470bef9a@val@spvtools@@YA?AW4spv_result_t@@IPBD0_N1IAAV?$unordered_map@U?$pair@II@std@@ULayoutConstraints@?A0x470bef9a@val@spvtools@@UPairHash@456@U?$equal_to@U?$pair@II@std@@@2@V?$allocator@U?$pair@$$CBU?$pair@II@std@@ULayoutConstraints@?A0x470bef9a@val@spvtools@@@std@@@2@@0@AAVValidationState_t@45@@Z@44HHQAU1?1??2345@YA?AW46@I0011I23@Z@HV<lambda_19b221d05b429ea8871b3658691ee31d>@@44HH@Z)
shaderc_combined.lib(loop_fusion.obj) : error LNK2019: unresolved external symbol ___std_reverse_trivially_swappable_4 referenced in function "public: bool __thiscall spvtools::opt::LoopFusion::IsLegal(void)" (?IsLegal@LoopFusion@opt@spvtools@@QAE_NXZ)
..\..\bin\RenderSystem_Vulkan.dll : fatal error LNK1120: 2 unresolved externals
[100%] Linking CXX shared library ..\..\bin\RenderSystem_Direct3D11.dll
jom: D:\Repos\Forks\ogre-next-build\msvc2015_x86_release\CMakeFiles\Makefile2 [RenderSystems\Vulkan\CMakeFiles\RenderSystem_Vulkan.dir\all] Error 2
jom: D:\Repos\Forks\ogre-next-build\msvc2015_x86_release\Makefile [all] Error 2

What does it mean?

User avatar
dark_sylinc
OGRE Team Member
OGRE Team Member
Posts: 5446
Joined: Sat Jul 21, 2007 4:55 pm
Location: Buenos Aires, Argentina
x 1348

Re: [3.0] Can't build vulkan.

Post by dark_sylinc »

I strongly suspect this problem is caused by MSVC 2015 just being too old.

Edit: Hold on a sec. I just noticed jom there. Would you be able to build the dependencies using MSVC instead? or just use the quick start script and launch build_ogre_Visual_Studio_14_2015_Win32.bat.

przemir
Halfling
Posts: 68
Joined: Sun May 11, 2014 7:55 pm
Location: Poland
x 21

Re: [3.0] Can't build vulkan.

Post by przemir »

Turns out I did something stupid. I though I was suppossed to install vulkan SDK and this set environment variables. And it set cmake variables "Vulkan_*" with paths to this SDK instead of ogredeps.

After removing vulkan SDK I had problem with

Code: Select all

shaderc_combined.lib(ShaderLang.cpp.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in OgreVulkanAsyncTextureTicket.cpp.obj
shaderc_combined.lib(ShaderLang.cpp.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MDd_DynamicDebug' doesn't match value 'MD_DynamicRelease' in OgreVulkanAsyncTextureTicket.cpp.obj
dark_sylinc wrote: Fri Jan 13, 2023 3:13 pm

Edit: Hold on a sec. I just noticed jom there. Would you be able to build the dependencies using MSVC instead? or just use the quick start script and launch `build_ogre_Visual_Studio_14_2015_Win32.bat`.

I ended up building dependencies that way (just dependencies). Then generated Ogre as I usually do (I use cmake-gui with "NMake Makefiles JOM" generator).

I finally build release version with vulkan.

User avatar
dark_sylinc
OGRE Team Member
OGRE Team Member
Posts: 5446
Joined: Sat Jul 21, 2007 4:55 pm
Location: Buenos Aires, Argentina
x 1348

Re: [3.0] Can't build vulkan.

Post by dark_sylinc »

The linking error means debug and release libs were mixed up (i.e. OgreNext Release trying to use Debug dependencies); or the wrong compiler settings.

Since you are using JOM generator (which is not tested), it's possible that a different CMake path is being taken that sets the wrong compiler flags.