curl / Mailing Lists / curl-library / Single Mail
Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

Re: libcurl build from source with openssl

From: Nir Azkiel via curl-library <curl-library_at_cool.haxx.se>
Date: Thu, 25 Feb 2021 00:24:30 +0200

Sure,

This is the cmake file for the libcurl:

    include(ExternalProject)
    message(STATUS "Building libcurl enabled")

    set(CURL_FLAGS -DBUILD_CURL_EXE=OFF -DBUILD_SHARED_LIBS=OFF
-DUSE_WIN32_LDAP=OFF -DHTTP_ONLY=ON -DCURL_ZLIB=OFF
-DCURL_DISABLE_CRYPTO_AUTH=ON -DCMAKE_USE_LIBSSH2=OFF -DBUILD_TESTING=OFF )
    if (WIN32)
        set(CURL_FLAGS ${CURL_FLAGS} -DCURL_STATIC_CRT=ON )
    endif()

    if (APPLE)
        set(CURL_FLAGS ${CURL_FLAGS} -DCMAKE_USE_SECTRANSP=ON )
    elseif(WIN32)
        set(CURL_FLAGS ${CURL_FLAGS} -DCMAKE_USE_SCHANNEL=ON )
    else()
        set(CURL_FLAGS ${CURL_FLAGS} -DCMAKE_USE_OPENSSL=ON )
    endif()

    ExternalProject_Add(
        libcurl
        PREFIX libcurl
        GIT_REPOSITORY "https://github.com/curl/curl.git"
        GIT_TAG "2f33be817cbce6ad7a36f27dd7ada9219f13584c" # curl-7_75_0
        SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/third-party/libcurl
        CMAKE_ARGS -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS}
                    -DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
                    -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
                    -DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
                    -DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
                    -DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}

-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}

-DCMAKE_CXX_STANDARD_LIBRARIES=${CMAKE_CXX_STANDARD_LIBRARIES}

-DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/libcurl/libcurl_install
                    -DCMAKE_INSTALL_LIBDIR=lib
                    -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
                    -DANDROID_ABI=${ANDROID_ABI}
                    -DANDROID_STL=${ANDROID_STL} ${CURL_FLAGS}
        UPDATE_COMMAND ""
        PATCH_COMMAND ""
        TEST_COMMAND ""
    )

    set(CURL_DEBUG_TARGET_NAME "libcurl-d")
    set(CURL_RELEASE_TARGET_NAME "libcurl")
    add_library(curl INTERFACE)
    add_definitions(-DCURL_STATICLIB) # Mandatory for building libcurl as
static lib

    target_include_directories(curl INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/libcurl/libcurl_install/include>)

    # libcurl require ws2_32.lib for windows only
    if (WIN32)
        target_link_libraries(curl INTERFACE ws2_32.lib crypt32.lib)
    else(NOT APPLE)
        set(OPENSSL_USE_STATIC_LIBS TRUE)
        find_package(OpenSSL REQUIRED)
        target_link_libraries(curl INTERFACE OpenSSL::SSL OpenSSL::Crypto)
    endif()

    target_link_libraries(curl INTERFACE debug
${CMAKE_CURRENT_BINARY_DIR}/libcurl/libcurl_install/lib/${CURL_DEBUG_TARGET_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})
    target_link_libraries(curl INTERFACE optimized
${CMAKE_CURRENT_BINARY_DIR}/libcurl/libcurl_install/lib/${CURL_RELEASE_TARGET_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX})



on my application cmake I have this :

        add_dependencies(rs-depth-quality libcurl)
        target_link_libraries(rs-depth-quality curl)



The yellow line is in charge of adding the linkage to the curl dependency

The green line add the curl project with it's depedency to my application.

It works on Win /Linux /OSX without SSL, with the SSL addition it works on
Win but Linux and OSX complains about linkage errors .

Thanks

On Wed, Feb 24, 2021 at 11:13 PM Ray Satiro via curl-library <
curl-library_at_cool.haxx.se> wrote:

> On 2/24/2021 9:40 AM, Nir Azkiel via curl-library wrote:
>
> I got libcurl downloaded and build, I would like to add HTTPS support but
> I keep getting linkage errors.
>
> I added this flag to libcurl Externalproject_Add
> -DCMAKE_USE_OPENSSL=ON
>
> also I added link to ssl like this
>
> set(OPENSSL_USE_STATIC_LIBS TRUE)
> find_package(OpenSSL REQUIRED)
> target_link_libraries(curl INTERFACE OpenSSL::SSL OpenSSL::Crypto).
>
> I am using libcurl latest release : 7.75
>
> My configure step find the ssl package:
> Found OpenSSL: /usr/lib/x86_64-linux-gnu/libcrypto.a (found version
> "1.0.2g")
> I keep getting linkage errors like this:
>
> ../../libcurl/libcurl_install/lib/libcurl.a(openssl.c.o): In function `ossl_log_tls12_secret':
> 3703/home/travis/build/Nir-Az/librealsense/build/third-party/libcurl/lib/vtls/openssl.c:270: undefined reference to `SSL_get_session'
> 3704../../libcurl/libcurl_install/lib/libcurl.a(openssl.c.o): In function `ossl_strerror':
> 3705/home/travis/build/Nir-Az/librealsense/build/third-party/libcurl/lib/vtls/openssl.c:354: undefined reference to `ERR_error_string_n'
>
>
> ERR_error_string_n is in libcrypto so I think your project is not
> including it. Maybe it is the INTERFACE dependency specification? OTOH we
> are a bit unfamiliar with cmake. Can you give us a minimal sample cmake
> project that can be used to reproduce?
>
>
> -------------------------------------------------------------------
> Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
> Etiquette: https://curl.se/mail/etiquette.html



-- 
*ניר אזקיאלNir Azkiel*


-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html
Received on 2021-02-24