fix(windows): statically link MinGW runtime into all binaries
The static-MinGW recipe (-static-libgcc -static-libstdc++ -static) was only applied inside the VOICECAT_BUILD_SHARED branch in core/CMakeLists, so it covered voicecat.dll but not voicecat-server.exe / vccli. With the x64-mingw-static triplet only vcpkg's own deps are static; the GCC/MinGW runtime stays dynamic, so the server failed to start on clean Windows machines with missing libgcc_s_seh-1.dll / libwinpthread-1.dll / libstdc++-6.dll. Move the recipe to a global add_link_options (WIN32 AND MINGW) so every produced binary embeds the runtime. Verified with objdump -p: only Windows system DLLs remain. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,20 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||
|
||||
# ── Static MinGW runtime (Windows) ────────────────────────────────────────────
|
||||
# x64-mingw-static only statically links vcpkg's OWN deps (protobuf, sodium, ...);
|
||||
# the GCC/MinGW runtime stays dynamic by default, so every produced .exe/.dll
|
||||
# otherwise depends on libgcc_s_seh-1.dll / libwinpthread-1.dll / libstdc++-6.dll
|
||||
# at runtime — DLLs that exist on a dev box (MSYS2/UCRT64) but not on a clean
|
||||
# Windows machine, where the server then fails to start with "… was not found".
|
||||
# Apply the fully-static-MinGW recipe to ALL targets so binaries are portable.
|
||||
# (The SHARED voicecat.dll already sets these in core/CMakeLists.txt; the duplicate
|
||||
# is harmless. Verify with: objdump -p build/<preset>/bin/voicecat-server.exe |
|
||||
# grep "DLL Name" — only Windows system DLLs should remain.)
|
||||
if(WIN32 AND MINGW)
|
||||
add_link_options(-static-libgcc -static-libstdc++ -static -lwinpthread)
|
||||
endif()
|
||||
|
||||
# ── Targets ───────────────────────────────────────────────────────────────────
|
||||
add_subdirectory(core)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user