KhronosGroup / KhronosGroup/Vulkan-Hpp
How to use windows.h with the vulkan module?
- Dominant language
- C++
- Stars
- 3.8k
- Forks
- 374
- Avg merge
- 23h 4m
- Merged PRs (30d)
- 32
Description
Hey, i get a lot of errors when trying to include both `windows.h` and import the vulkan hpp module. The problem is some other headers depend on `windows.h`, so i need to use it.
```cpp
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#include
#endif
...
import vulkan;
```
Error example:
```
[build] In file included from C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/pmmintrin.h:31,
[build] from C:/msys64/ucrt64/include/c++/15.2.0/x86_64-w64-mingw32/bits/opt_random.h:34,
[build] from C:/msys64/ucrt64/include/c++/15.2.0/random:51,
[build] from C:/msys64/ucrt64/include/c++/15.2.0/x86_64-w64-mingw32/bits/stdc++.h:182,
[build] from C:/msys64/ucrt64/include/c++/15.2.0/bits/std.cc:30,
[build] of module std, imported at C:/VulkanSDK/1.4.341.0/include/vulkan/vulkan.cppm:32,
[build] of module vulkan, imported at C:/Graphics/Vulkan/Vulkan-Tutorial/src/tutorial.cpp:63:
[build] C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/emmintrin.h:594:1: error: conflicting language linkage for imported declaration '__m128i _mm_set_epi64x(long long int, long long int)'
[build] 594 | _mm_set_epi64x (long long __q1, long long __q0)
[build] | ^~~~~~~~~~~~~~
[build] In file included from C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/xmmintrin.h:1364,
[build] from C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/immintrin.h:31,
[build] from C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/x86intrin.h:32,
[build] from C:/msys64/ucrt64/include/winnt.h:1695,
[build] from C:/msys64/ucrt64/include/minwindef.h:163,
[build] from C:/msys64/ucrt64/include/windef.h:9,
[build] from C:/msys64/ucrt64/include/windows.h:69,
[build] from C:/Graphics/Vulkan/Vulkan-Tutorial/src/tutorial.cpp:40:
[build] C:/msys64/ucrt64/lib/gcc/x86_64-w64-mingw32/15.2.0/include/emmintrin.h:594:1: note: existing declaration '__m128i _mm_set_epi64x(long long int, long long int)'
[build] 594 | _mm_set_epi64x (long long __q1, long long __q0)
[build] | ^~~~~~~~~~~~~~
...
```
Contributor guide
Research direction
Start with the include and module-import order shown in src/tutorial.cpp, then inspect the referenced Vulkan SDK vulkan.cppm and reproduce the conflict with the reported MinGW toolchain. Compare the windows.h and vulkan module declarations involved in the error. Done means establishing a supported usage or documenting the compatibility limitation and its conditions.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100