Hi, folks
I am currently trying to build static binary of a C++ & CMake based project, qbittorrent-enhanced-edition to be specific.
My goal would be producing a ELF which is completely static, i.e. ldd
shows statically linked
.
all static libraries required are in there position, i.e. /usr/lib
:
07ab00ba483e:/build/qBittorrent-Enhanced-Edition/build# ls /usr/lib/*.a
/usr/lib/libQt6DeviceDiscoverySupport.a /usr/lib/libboost_regex.a
/usr/lib/libQt6ExampleIcons.a /usr/lib/libboost_serialization.a
/usr/lib/libQt6ExamplesAssetDownloader.a /usr/lib/libboost_stacktrace_addr2line.a
/usr/lib/libQt6FbSupport.a /usr/lib/libboost_stacktrace_basic.a
/usr/lib/libQt6InputSupport.a /usr/lib/libboost_stacktrace_noop.a
/usr/lib/libQt6KmsSupport.a /usr/lib/libboost_system.a
/usr/lib/libQt6PacketProtocol.a /usr/lib/libboost_test_exec_monitor.a
/usr/lib/libQt6QmlAssetDownloader.a /usr/lib/libboost_thread.a
/usr/lib/libQt6QmlDebug.a /usr/lib/libboost_timer.a
/usr/lib/libQt6QmlDom.a /usr/lib/libboost_type_erasure.a
/usr/lib/libQt6QmlLS.a /usr/lib/libboost_unit_test_framework.a
/usr/lib/libQt6QmlToolingSettings.a /usr/lib/libboost_url.a
/usr/lib/libQt6QmlTypeRegistrar.a /usr/lib/libboost_wave.a
/usr/lib/libQt6QuickControlsTestUtils.a /usr/lib/libboost_wserialization.a
/usr/lib/libQt6QuickTestUtils.a /usr/lib/libc.a
/usr/lib/libXcomposite.a /usr/lib/libcrypt.a
/usr/lib/libXcursor.a /usr/lib/libcrypto.a
# truncated
I had tried Ninja
and Unix Makefiles
generator with various possible cli options I browsed from web incl:
DCMAKE_{EXE|MODULE|SHARED|STATIC}_LINKER_FLAGS="-static-libgcc -static-libstdc++ -static"
-DCMAKE_FIND_LIBRARY_SUFFIXES=".a"
-DBUILD_SHARED_LIBS=OFF
but CMake just stubbornly insists on linking against the shared libraries, not the static ones, resulting in such error when linking:
[ 99%] Linking CXX executable ../../qbittorrent-nox
/usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/../../../../x86_64-alpine-linux-musl/bin/ld: attempted static link of dynamic object `/usr/lib/libcrypto.so'
collect2: error: ld returned 1 exit status
make[2]: *** [src/app/CMakeFiles/qbt_app.dir/build.make:1758: qbittorrent-nox] Error 1
make[1]: *** [CMakeFiles/Makefile2:255: src/app/CMakeFiles/qbt_app.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
is there any option available to force cmake to link against static libraries only and disregard any shared libraries?
best regards.