Tôi muốn tĩnh liên kết các thư viện được liệt kê dưới đây:Liên kết tĩnh OpenSSL crypto thư viện trong CMake
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}
Tôi không muốn thêm -static
-CMAKE_EXE_LINKER_FLAGS
, bởi vì trong trường hợp đó tất cả mọi thứ được liên kết tĩnh. CMake tìm thấy các thư viện tĩnh:
/usr/local/lib/libsodium.a
/usr/lib/x86_64-linux-gnu/libssl.a
/usr/lib/x86_64-linux-gnu/libcrypto.a
và có vẻ như rằng mọi thứ đều được liên kết tĩnh trừ 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]
Làm thế nào tôi có thể liên kết libcrypto
tĩnh để thực thi hay không?
có bạn kiểm tra bạn thực sự tìm ra thư viện phải không? Ngoài ra nó có thể giúp tùy chọn xác định đường dẫn nơi mà thư viện tĩnh được tìm thấy. –