2016-02-18 7 views
5

में मैं स्थिर पुस्तकालयों नीचे दिए गए लिंक करना चाहते हैं:स्थिर लिंक करना OpenSSL क्रिप्टो पुस्तकालय 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} 

मैं CMAKE_EXE_LINKER_FLAGS को -static जोड़ने के लिए है, क्योंकि उस मामले में सब कुछ स्थिर जुड़ा हुआ है नहीं करना चाहती। CMake स्थिर पुस्तकालयों पाता है:

/usr/local/lib/libsodium.a 
/usr/lib/x86_64-linux-gnu/libssl.a 
/usr/lib/x86_64-linux-gnu/libcrypto.a 

और ऐसा लगता है कि सब कुछ 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] 

मैं अपने निष्पादन के लिए स्थिर libcrypto लिंक कर सकते हैं?

+0

आप आप वास्तव में सही पुस्तकालय की जाँच की है? इसके अलावा यह उस पथ को वैकल्पिक रूप से परिभाषित करने में मदद कर सकता है जहां स्थिर पुस्तकालय पाया जाना है। –

उत्तर

0

CMake प्रलेखन FindOpenSSL page पर संस्करण 3.4 के साथ शुरू कहते हैं: सही पर OPENSSL_USE_STATIC_LIBS

सेट स्थिर पुस्तकालयों के लिए देखने के लिए।

(यह मानते हुए अगर वे पाए जाते हैं वे उपयोग किया जाएगा)

उदाहरण:

cmake_minimum_required(VERSION 3.4) 
project(Foo) 

set(SOURCE_FILES main.cpp) 

find_package(OpenSSL REQUIRED) 
if(OPENSSL_FOUND) 
set(OPENSSL_USE_STATIC_LIBS TRUE) 
endif() 

add_executable(${PROJECT_NAME} ${SOURCE_FILES}) 
target_link_libraries(${PROJECT_NAME} OpenSSL::Crypto) 
संबंधित मुद्दे