-
Notifications
You must be signed in to change notification settings - Fork 4k
Description
When consuming Arrow via vcpkg with a multi-config CMake generator (Visual Studio) and a static triplet (x64-windows-static), Release builds link against debug versions of Snappy and Brotli. This causes LNK2038 (_ITERATOR_DEBUG_LEVEL / RuntimeLibrary mismatch) errors.
Steps to reproduce
- Download arrow-vcpkg-issue.zip
- Run the
repro.ps1. - See the error:
Project "D:\workspace\arrow-vcpkg-issue\build\arrow_vcpkg_repro.sln" on node 1 (repro:Rebuild target(s)).
ValidateSolutionConfiguration:
Building solution configuration "Release|x64".
ValidateProjects:
The project "ALL_BUILD" is not selected for building in solution configuration "Release|x64".
Project "D:\workspace\arrow-vcpkg-issue\build\arrow_vcpkg_repro.sln" (1) is building "D:\workspace\arrow-vcpkg-issue\build\
repro.vcxproj.metaproj" (2) on node 1 (Rebuild target(s)).
Project "D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj.metaproj" (2) is building "D:\workspace\arrow-vcpkg-issue\build
\ZERO_CHECK.vcxproj" (3) on node 1 (Rebuild target(s)).
CoreClean:
Creating directory "x64\Release\ZERO_CHECK\".
PrepareForBuild:
Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms
/cpp/structured-output for more details.
Creating directory "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\".
InitializeBuildStatus:
Creating "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
Touching "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
CustomBuild:
1>Checking Build System
FinalizeBuildStatus:
Deleting file "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\unsuccessfulbuild".
Touching "x64\Release\ZERO_CHECK\ZERO_CHECK.tlog\ZERO_CHECK.lastbuildstate".
Done Building Project "D:\workspace\arrow-vcpkg-issue\build\ZERO_CHECK.vcxproj" (Rebuild target(s)).
Project "D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj.metaproj" (2) is building "D:\workspace\arrow-vcpkg-issue\build
\repro.vcxproj" (4) on node 1 (Rebuild target(s)).
CoreClean:
Creating directory "repro.dir\Release\".
PrepareForBuild:
Structured output is enabled. The formatting of compiler diagnostics will reflect the error hierarchy. See https://aka.ms
/cpp/structured-output for more details.
Creating directory "D:\workspace\arrow-vcpkg-issue\build\Release\".
Creating directory "repro.dir\Release\repro.tlog\".
InitializeBuildStatus:
Creating "repro.dir\Release\repro.tlog\unsuccessfulbuild" because "AlwaysCreate" was specified.
Touching "repro.dir\Release\repro.tlog\unsuccessfulbuild".
CustomBuild:
Building Custom Rule D:/workspace/arrow-vcpkg-issue/CMakeLists.txt
ClCompile:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\CL.exe /c /nologo /W1 /
WX- /diagnostics:column /O2 /Ob2 /D _WINDLL /D _MBCS /D WIN32 /D _WINDOWS /D NDEBUG /D ARROW_STATIC /D PARQUET_STATIC /D
ARROW_FLIGHT_STATIC /D ARROW_FLIGHT_SQL_STATIC /D "CMAKE_INTDIR=\"Release\"" /D repro_EXPORTS /Gm- /EHsc /MT /GS /fp:prec
ise /Zc:wchar_t /Zc:forScope /Zc:inline /std:c++20 /Fo"repro.dir\Release\\" /Fd"repro.dir\Release\vc143.pdb" /external:W0
/Gd /TP /errorReport:queue /external:I "D:/workspace/arrow-vcpkg-issue/build/vcpkg_installed/x64-windows-static/include
" "D:\workspace\arrow-vcpkg-issue\repro.cpp"
repro.cpp
Link:
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\bin\HostX64\x64\link.exe /ERRORREPORT:Q
UEUE /OUT:"D:\workspace\arrow-vcpkg-issue\build\Release\repro.dll" /INCREMENTAL:NO /NOLOGO "vcpkg_installed\x64-windows-s
tatic\lib\parquet.lib" "vcpkg_installed\x64-windows-static\lib\arrow.lib" "vcpkg_installed\x64-windows-static\debug\lib\b
rotlienc.lib" "vcpkg_installed\x64-windows-static\debug\lib\brotlidec.lib" "vcpkg_installed\x64-windows-static\debug\lib\
brotlicommon.lib" "vcpkg_installed\x64-windows-static\lib\bz2.lib" "vcpkg_installed\x64-windows-static\lib\lz4.lib" "vcpk
g_installed\x64-windows-static\debug\lib\snappy.lib" "vcpkg_installed\x64-windows-static\lib\zlib.lib" "vcpkg_installed\x
64-windows-static\lib\zstd.lib" "vcpkg_installed\x64-windows-static\lib\thriftmd.lib" "vcpkg_installed\x64-windows-static
\lib\libssl.lib" "vcpkg_installed\x64-windows-static\lib\libcrypto.lib" crypt32.lib ws2_32.lib kernel32.lib user32.lib gd
i32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTUAC:"level=
'asInvoker' uiAccess='false'" /manifest:embed /PDB:"D:/workspace/arrow-vcpkg-issue/build/Release/repro.pdb" /SUBSYSTEM:CO
NSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"D:/workspace/arrow-vcpkg-issue/build/Release/repro.lib" /MACHINE:X64 /mac
hine:x64 /DLL repro.dir\Release\repro.obj
snappy.lib(snappy.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0'
in repro.obj [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
snappy.lib(snappy.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match va
lue 'MT_StaticRelease' in repro.obj [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
Creating library D:/workspace/arrow-vcpkg-issue/build/Release/repro.lib and object D:/workspace/arrow-vcpkg-issue/buil
d/Release/repro.exp
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library [D:\workspace\arro
w-vcpkg-issue\build\repro.vcxproj]
snappy.lib(snappy.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReport referenced in function "void * __cdecl
std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_vect
or_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z) [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
D:\workspace\arrow-vcpkg-issue\build\Release\repro.dll : fatal error LNK1120: 1 unresolved externals [D:\workspace\arrow-vc
pkg-issue\build\repro.vcxproj]
Done Building Project "D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj" (Rebuild target(s)) -- FAILED.
Done Building Project "D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj.metaproj" (Rebuild target(s)) -- FAILED.
Done Building Project "D:\workspace\arrow-vcpkg-issue\build\arrow_vcpkg_repro.sln" (repro:Rebuild target(s)) -- FAILED.
Build FAILED.
"D:\workspace\arrow-vcpkg-issue\build\arrow_vcpkg_repro.sln" (repro:Rebuild target) (1) ->
"D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj.metaproj" (Rebuild target) (2) ->
"D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj" (Rebuild target) (4) ->
(Link target) ->
LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library [D:\workspace\ar
row-vcpkg-issue\build\repro.vcxproj]
"D:\workspace\arrow-vcpkg-issue\build\arrow_vcpkg_repro.sln" (repro:Rebuild target) (1) ->
"D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj.metaproj" (Rebuild target) (2) ->
"D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj" (Rebuild target) (4) ->
(Link target) ->
snappy.lib(snappy.cc.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '
0' in repro.obj [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
snappy.lib(snappy.cc.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match
value 'MT_StaticRelease' in repro.obj [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
snappy.lib(snappy.cc.obj) : error LNK2019: unresolved external symbol _CrtDbgReport referenced in function "void * __cdec
l std::_Allocate_manually_vector_aligned<struct std::_Default_allocate_traits>(unsigned __int64)" (??$_Allocate_manually_ve
ctor_aligned@U_Default_allocate_traits@std@@@std@@YAPEAX_K@Z) [D:\workspace\arrow-vcpkg-issue\build\repro.vcxproj]
D:\workspace\arrow-vcpkg-issue\build\Release\repro.dll : fatal error LNK1120: 1 unresolved externals [D:\workspace\arrow-
vcpkg-issue\build\repro.vcxproj]
Expected behavior
Release builds should link against release libraries. The vcpkg-installed Snappy and Brotli packages provide proper per-configuration CMake targets (IMPORTED_LOCATION_DEBUG / IMPORTED_LOCATION_RELEASE). Arrow's find modules should use them.
Environment
- Arrow 23.0.1
- vcpkg with triplet=
x64-windows-static - Windows x64
Remarks
The problem is related (at least partially) to the changes from #46467. It seems that ARROW_VCPKG is empty instead of the expected "ON" value.
The #46565 claims it fixes the issue where ARROW_VCPKG is not defined, but in my repro, ARROW_VCPKG is still empty.
Component(s)
Packaging