Ich möchte die unten aufgeführten Bibliotheken statisch verknüpfen:
set_target_properties(exec PROPERTIES LINK_SEARCH_START_STATIC 1)
set_target_properties(exec PROPERTIES LINK_SEARCH_END_STATIC 1)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
find_library(SODIUM_LIB libsodium.a REQUIRED)
find_library(SSL_LIB libssl.a REQUIRED)
find_library(CRYPTO_LIB libcrypto.a REQUIRED)
find_library(DL_LIB libdl.a REQUIRED)
message(${SODIUM_LIB})
message(${SSL_LIB})
message(${CRYPTO_LIB})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
target_link_libraries(
exec
${SODIUM_LIB}
${SSL_LIB}
${CRYPTO_LIB}
${DL_LIB}
Ich möchte nichts hinzufügen -static
Zu CMAKE_EXE_LINKER_FLAGS
, denn in diesem Fall ist alles statisch verknüpft. CMake findet die statischen Bibliotheken:
/usr/local/lib/libsodium.a
/usr/lib/x86_64-linux-gnu/libssl.a
/usr/lib/x86_64-linux-gnu/libcrypto.a
und es scheint, dass alles statisch verknüpft ist, außer libcrypto
:
readelf -d exec
0x0000000000000001 (NEEDED) Shared library: [libcrypto.so.1.0.0]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x0000000000000001 (NEEDED) Shared library: [ld-linux-x86-64.so.2]
Wie kann ich verlinken libcrypto
statisch zu meiner ausführbaren Datei?
Haben Sie überprüft, ob Sie tatsächlich die richtige Bibliothek gefunden haben? Außerdem kann es hilfreich sein, optional den Pfad zu definieren, in dem die statische Bibliothek gefunden werden soll.
– Ælex
23. Juli 2016 um 19:00 Uhr