boostorg / boostorg/boost

Boost CMake Static Build is Broken

Open
#1,079 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
HTML
Stars
8.6k
Forks
1.9k
Avg merge
39m
Merged PRs (30d)
2

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
```

1. https://github.com/monero-project/monero/actions/runs/17355393056/job/49267581759#step:6:14433
2. https://github.com/msys2/MINGW-packages/blob/30aa64090795cf43e58e209603a5e92515ec543d/mingw-w64-boost/PKGBUILD#L84

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.