-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
When building static Boost with CMake on MSYS2/MinGW, the script is totally broken.
For example, as you can see from the log below, it builds Boost statically, but it finds and links against .dll.a
files, which are shared-library stubs on MinGW. I encountered this issue while debugging the CI for the Monero project and noticed that MinGW/MSYS2 is building Boost with CMake. Monero CI builds Monero statically and uses Boost.Locale. Although Boost.Locale is compiled statically, it depends on the ICU dynamic library (.dll.a
and .dll
), which defeats the whole purpose of a static build. I debugged it and discovered that, regardless of the options passed to the Boost build, it uses .dll.a
import libraries and does not respect the static-build setting on MSYS/MinGW
These three lines from the logs are important:
-- Found ZLIB: C:/msys64/mingw64/lib/libz.dll.a (found version "1.3.1")
-- Found BZip2: C:/msys64/mingw64/lib/libbz2.dll.a (found version "1.0.8")
-- Found LibLZMA: C:/msys64/mingw64/lib/liblzma.dll.a (found version "5.8.1")
Full log:
$ cd /home/user/dev/boost-1.89.0/ && rm -rf /home/user/dev/boost-1.89.0/build/ && mk
dir -p /home/user/dev/boost-1.89.0/build && cd /home/user/dev/boost-1.89.0/build &&
cmake.exe -G "Ninja" -DBUILD_SHARED_LIBS="OFF" -DBOOST_INSTALL_LAYOUT=
tagged -DBOOST_STACKTRACE_ENABLE_FROM_EXCEPTION=OFF -DBUILD_TESTING=OFF
-S /home/user/dev/boost-1.89.0/ -B /home/user/dev/boost-1.89.0/build -DBoo
st_USE_STATIC_LIB=ON -DBoost_USE_STATIC_LIBS=1
-- The CXX compiler identification is GNU 15.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Boost: using tagged layout: include, bin, lib, lib/cmake
-- Boost: Release build, static libraries, MPI OFF, Python OFF, testing OFF
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Performing Test BOOST_ATOMIC_TARGET_X86
-- Performing Test BOOST_ATOMIC_TARGET_X86 - Success
-- Performing Test BOOST_ATOMIC_COMPILER_HAS_SSE2
-- Performing Test BOOST_ATOMIC_COMPILER_HAS_SSE2 - Success
-- Performing Test BOOST_ATOMIC_COMPILER_HAS_SSE41
-- Performing Test BOOST_ATOMIC_COMPILER_HAS_SSE41 - Success
-- Performing Test BOOST_ATOMIC_HAS_PTHREAD_COND_CLOCKWAIT
-- Performing Test BOOST_ATOMIC_HAS_PTHREAD_COND_CLOCKWAIT - Failed
-- Performing Test BOOST_CHARCONV_QUADMATH_FOUND
-- Performing Test BOOST_CHARCONV_QUADMATH_FOUND - Success
-- Boost.Charconv: quadmath support ON
-- Found OpenSSL: C:/msys64/mingw64/lib/libcrypto.dll.a (found version "3.5.2")
-- The C compiler identification is GNU 15.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Boost.Context: architecture x86_64, binary format pe, ABI ms, assembler gas, suffix .asm, implementation fcontext
-- The ASM compiler identification is GNU
-- Found assembler: C:/msys64/mingw64/bin/cc.exe
-- Boost.Fiber: NUMA target OS is windows
-- Performing Test BOOST_FILESYSTEM_HAS_INIT_PRIORITY
-- Performing Test BOOST_FILESYSTEM_HAS_INIT_PRIORITY - Success
-- Performing Test BOOST_FILESYSTEM_HAS_CXX20_ATOMIC_REF
-- Performing Test BOOST_FILESYSTEM_HAS_CXX20_ATOMIC_REF - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BLKSIZE
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BLKSIZE - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIM
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIM - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIMENSEC - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_MTIMESPEC - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMENSEC
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMENSEC - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMESPEC
-- Performing Test BOOST_FILESYSTEM_HAS_STAT_ST_BIRTHTIMESPEC - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STATX
-- Performing Test BOOST_FILESYSTEM_HAS_STATX - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_STATX_SYSCALL
-- Performing Test BOOST_FILESYSTEM_HAS_STATX_SYSCALL - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW
-- Performing Test BOOST_FILESYSTEM_HAS_FDOPENDIR_NOFOLLOW - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_DIRENT_D_TYPE
-- Performing Test BOOST_FILESYSTEM_HAS_DIRENT_D_TYPE - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_POSIX_AT_APIS
-- Performing Test BOOST_FILESYSTEM_HAS_POSIX_AT_APIS - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_FALLOCATE
-- Performing Test BOOST_FILESYSTEM_HAS_FALLOCATE - Failed
-- Performing Test BOOST_FILESYSTEM_HAS_BCRYPT
-- Performing Test BOOST_FILESYSTEM_HAS_BCRYPT - Success
-- Found ZLIB: C:/msys64/mingw64/lib/libz.dll.a (found version "1.3.1")
-- Found BZip2: C:/msys64/mingw64/lib/libbz2.dll.a (found version "1.0.8")
-- Found LibLZMA: C:/msys64/mingw64/lib/liblzma.dll.a (found version "5.8.1")
-- Performing Test BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS
-- Performing Test BOOST_IOSTREAMS_HAS_LZMA_CPUTHREADS - Success
-- Boost.Iostreams: ZLIB ON, BZip2 ON, LZMA ON (multithreaded), Zstd ON
And this output shows static version of those libraries are available, but CMake does not find them:
user@DESKTOP MINGW64 ~
$ ls -hall /mingw64/lib/libz.a
-rw-r--r-- 1 user user 107K Jan 22 2024 /mingw64/lib/libz.a
user@DESKTOP MINGW64 ~
$ ls -hall /mingw64/lib/libbz2.a
-rw-r--r-- 1 user user 72K Sep 26 2023 /mingw64/lib/libbz2.a
user@DESKTOP MINGW64 ~
$ ls -hall /mingw64/lib/liblzma.a
-rw-r--r-- 1 user user 298K Apr 11 05:15 /mingw64/lib/liblzma.a