aLVINlEE9 opened a new issue, #47590:
URL: https://github.com/apache/arrow/issues/47590
### Describe the bug, including details regarding any error messages,
version, and platform.
## Description
Build fails on Windows 11 with MSVC when UNICODE is defined. The problem is
that some code uses `CreateFileW` explicitly while others use generic names
like `GetModuleHandle` and `CreateFileMapping` without proper string literals.
## Environment
- Windows 11
- MSVC 2022 Community
- CMake + Ninja
- Debug build with UNICODE/_UNICODE
## Steps to Reproduce
1. Clone Apache Arrow repository
2. Configure with CMake on Windows with UNICODE defined:
```
cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug ..
```
3. Build with ninja:
```
ninja
```
## Error
```
[167/254] Building CXX object
third_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\util\cpu_info.cc.obj
FAILED:
third_party/arrow/cpp/src/arrow/CMakeFiles/arrow_util_static.dir/util/cpu_info.cc.obj
C:\PROGRA~1\MICROS~1\2022\COMMUN~1\VC\Tools\MSVC\1444~1.352\bin\Hostx64\x64\cl.exe
/nologo /TP -DARROW_HAVE_AVX2 -DARROW_HAVE_BMI2 -DARROW_HAVE_RUNTIME_AVX2
-DARROW_HAVE_RUNTIME_AVX512 -DARROW_HAVE_RUNTIME_BMI2
-DARROW_HAVE_RUNTIME_SSE4_2 -DARROW_HAVE_SSE4_2 -DARROW_STATIC
-DBOOST_ALL_NO_LIB -DBOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
-DBOOST_MP_STANDALONE=1 -DUNICODE -DURI_STATIC_BUILD -DWIN32
-D_CRT_SECURE_NO_WARNINGS -D_M_X64 -D_UNICODE
-IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\src
-IC:\Users\user\Workspace\Project\third_party\arrow\cpp\src
-IC:\Users\user\Workspace\Project\third_party\arrow\cpp\src\generated
-IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\lz4-src\build\cmake\..\..\lib
-external:I"C:\Program Files\Microsoft Visual
Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include" -external:I"C:\Program
Files\Microsoft Visual
Studio\2022\Community\VC\Tools\MSVC\14.44.35207\ATLMFC\include"
-external:I"C:\Program Files\Microsoft Visu
al Studio\2022\Community\VC\Auxiliary\VS\include" -external:I"C:\Program Files
(x86)\Windows Kits\10\include\10.0.26100.0\ucrt" -external:I"C:\Program Files
(x86)\Windows Kits\10\include\10.0.26100.0\um" -external:I"C:\Program Files
(x86)\Windows Kits\10\include\10.0.26100.0\shared" -external:I"C:\Program Files
(x86)\Windows Kits\10\include\10.0.26100.0\winrt" -external:I"C:\Program Files
(x86)\Windows Kits\10\include\10.0.26100.0\cppwinrt"
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\headers\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\algorithm\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\array\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\assert\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\config\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-da
ta\_deps\boost-src\libs\static_assert\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\throw_exception\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\bind\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\core\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\concept_check\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\preprocessor\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\type_traits\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\exception\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\smart_ptr\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\tuple\include
-external:IC:\Users\user\Workspace\Projec
t\build\win-x64-data\_deps\boost-src\libs\function\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\iterator\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\detail\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\fusion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\container_hash\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\describe\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\mp11\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\function_types\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\mpl\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\predef\include
-external:IC:\Users\user\Workspace\Projec
t\build\win-x64-data\_deps\boost-src\libs\utility\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\io\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\typeof\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\functional\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\optional\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\range\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\conversion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\regex\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\unordered\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\crc\include
-external:IC:\Users\user\Workspace\Project\build\win-
x64-data\_deps\boost-src\libs\scope_exit\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\tokenizer\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\uuid\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\numeric\conversion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\multiprecision\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\xsimd_ep\src\xsimd_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\snappy_ep\src\snappy_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\rapidjson_ep\src\rapidjson_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\zlib_ep\src\zlib_ep-install\include
-external:IC:\Users\user\Workspace\Proj
ect\build\win-x64-data\third_party\arrow\cpp\zstd_ep-install\include
-external:W0 /MP /EHsc /GR /utf-8 /DWIN32 /D_WINDOWS /EHsc
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING /W3 /EHsc /wd5105 /bigobj /utf-8
/W3 /wd4365 /wd4267 /wd4838 /wd4800 /wd4996 /wd4065 /arch:AVX2 /Od /Ob0 /RTC1
/MDd /D_DEBUG /JMC /WX -std:c++latest -MDd -ZI /showIncludes
/Fothird_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\util\cpu_info.cc.obj
/Fdthird_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\ /FS -c
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\cpu_info.cc
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\cpu_info.cc(85):
error C2664: 'HMODULE GetModuleHandleW(LPCWSTR)': cannot convert argument 1
from 'const char [9]' to 'LPCWSTR'
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\cpu_info.cc(85):
note: Types pointed to are unrelated; conversion requires reinterpret_cast,
C-style cast or parenthesized function-style cast
C:\Program Files (x86)\Windows
Kits\10\include\10.0.26100.0\um\libloaderapi.h(245): note: see declaration of
'GetModuleHandleW'
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\cpu_info.cc(85):
note: while trying to match the argument list '(const char [9])'
[188/254] Building CXX object
third_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\util\decimal.cc.obj
ninja: build stopped: subcommand failed.
```
```
C:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\iterator\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\detail\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\fusion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\container_hash\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\describe\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\mp11\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\function_types\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\mpl\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\predef\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\utility\include
-external:
IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\io\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\typeof\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\functional\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\optional\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\range\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\conversion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\regex\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\unordered\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\crc\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\scope_exit\include
-external:IC:\Users
\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\tokenizer\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\uuid\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\numeric\conversion\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\_deps\boost-src\libs\multiprecision\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\xsimd_ep\src\xsimd_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\snappy_ep\src\snappy_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\rapidjson_ep\src\rapidjson_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\zlib_ep\src\zlib_ep-install\include
-external:IC:\Users\user\Workspace\Project\build\win-x64-data\third_party\arrow\cpp\zstd_ep-install\include
-external:W0 /MP /EHsc /GR /utf-8 /DWIN32 /D_WINDOWS /EHsc
/D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING /W3 /EHsc /wd5105 /bigobj /utf-8
/W3 /wd4365 /wd4267 /wd4838 /wd4800 /wd4996 /wd4065 /arch:AVX2 /Od /Ob0 /RTC1
/MDd /D_DEBUG /JMC /WX -std:c++latest -MDd -ZI /showIncludes
/Fothird_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\util\io_util.cc.obj
/Fdthird_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\ /FS -c
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\io_util.cc
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\io_util.cc(1450):
error C2664: 'HANDLE
CreateFileMappingW(HANDLE,LPSECURITY_ATTRIBUTES,DWORD,DWORD,DWORD,LPCWSTR)':
cannot convert argument 6 from 'const char [1]' to 'LPCWSTR'
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\io_util.cc(1450):
note: Types pointed to are unrelated; conversion requires reinterpret_cast,
C-style cast or parenthesized function-style cast
C:\Program Files (x86)\Windows
Kits\10\include\10.0.26100.0\um\memoryapi.h(176): note: see declaration of
'CreateFileMappingW'
C:\Users\user\Workspace\Project\third_party\arrow\cpp\src\arrow\util\io_util.cc(1450):
note: while trying to match the argument list '(HANDLE, int, int, int, int,
const char [1])'
[22/68] Building CXX object
third_party\arrow\cpp\src\arrow\CMakeFiles\arrow_util_static.dir\util\ree_util.cc.obj
ninja: build stopped: subcommand failed.
```
## Problem
The codebase is inconsistent with Windows APIs:
Some files use explicit W versions:
```cpp
HANDLE file_handle = CreateFileW(file_name.ToNative().c_str(), GENERIC_READ,
...
```
But others don't:
```cpp
// cpu_info.cc line 85
GetModuleHandle("kernel32") // needs L"kernel32"
// io_util.cc line 1450
CreateFileMapping(h, NULL, PAGE_READWRITE, 0, 0, "") // needs L""
```
## Fix
Just need to add L prefix to string literals:
- `GetModuleHandle(L"kernel32")`
- `CreateFileMapping(h, NULL, PAGE_READWRITE, 0, 0, L"")`
After these changes, build works fine.
Either use explicit A/W versions everywhere or use TEXT() macro
consistently. Right now it's a mix that breaks depending on build settings.
### Component(s)
C++
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]