KhronosGroup / KhronosGroup/Vulkan-Hpp

How to use windows.h with the vulkan module?

Open
#2,536 3 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.