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
- Contemporary messages sorted: [ by date ] [ by thread ] [ by subject ] [ by author ] [ by messages with attachments ]
From: Ray Satiro via curl-library <curl-library_at_cool.haxx.se>
Date: Wed, 24 Feb 2021 23:16:01 -0500
On 2/24/2021 5:24 PM, Nir Azkiel via curl-library wrote:
> 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
> <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 <mailto: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?
>
>
Please don't top-post, it makes the conversation hard to follow [1]. I
was able to reproduce using cmake's demo project [2]. It looks like the
problem is library order. To reproduce I added appended to
Hello/CMakeLists.txt this
add_dependencies(Hello libcurl)
target_link_libraries(Hello curl)
.. then I appended the content from your cmake file for libcurl. I had
the same errors in Ubuntu 16. I ran make VERBOSE=1 and saw that the
OpenSSL libraries were included before the libcurl library:
/usr/bin/c++ CMakeFiles/helloDemo.dir/demo.cxx.o
CMakeFiles/helloDemo.dir/demo_b.cxx.o -o helloDemo -rdynamic
../Hello/libHello.a /usr/lib/x86_64-linux-gnu/libssl.a
/usr/lib/x86_64-linux-gnu/libcrypto.a
../Hello/libcurl/libcurl_install/lib/libcurl.a
I changed that around and added dl and pthread (since this is a static
link of OpenSSL that is necessary) I was able to get it to build.
/usr/bin/c++ CMakeFiles/helloDemo.dir/demo.cxx.o
CMakeFiles/helloDemo.dir/demo_b.cxx.o -o helloDemo -rdynamic
../Hello/libHello.a ../Hello/libcurl/libcurl_install/lib/libcurl.a
/usr/lib/x86_64-linux-gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a
-ldl -lpthread
The cmake equivalent changes would mean OpenSSL libs are included after
libcurl:
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})
target_link_libraries(curl INTERFACE OpenSSL::SSL OpenSSL::Crypto)
target_link_libraries(curl INTERFACE dl pthread)
You'd have to adjust that for your project but basically that's the
idea. I must reiterate I don't know much cmake. There are a few that do
know and hopefully they can chime in here. AFAICT this isn't a libcurl
problem. We can't be responsible for static linking dependencies.
[1]: https://curl.se/mail/etiquette.html#Do_Not_Top_Post
[2]: https://cmake.org/examples/
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html
Received on 2021-02-25
Date: Wed, 24 Feb 2021 23:16:01 -0500
On 2/24/2021 5:24 PM, Nir Azkiel via curl-library wrote:
> 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
> <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 <mailto: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?
>
>
Please don't top-post, it makes the conversation hard to follow [1]. I
was able to reproduce using cmake's demo project [2]. It looks like the
problem is library order. To reproduce I added appended to
Hello/CMakeLists.txt this
add_dependencies(Hello libcurl)
target_link_libraries(Hello curl)
.. then I appended the content from your cmake file for libcurl. I had
the same errors in Ubuntu 16. I ran make VERBOSE=1 and saw that the
OpenSSL libraries were included before the libcurl library:
/usr/bin/c++ CMakeFiles/helloDemo.dir/demo.cxx.o
CMakeFiles/helloDemo.dir/demo_b.cxx.o -o helloDemo -rdynamic
../Hello/libHello.a /usr/lib/x86_64-linux-gnu/libssl.a
/usr/lib/x86_64-linux-gnu/libcrypto.a
../Hello/libcurl/libcurl_install/lib/libcurl.a
I changed that around and added dl and pthread (since this is a static
link of OpenSSL that is necessary) I was able to get it to build.
/usr/bin/c++ CMakeFiles/helloDemo.dir/demo.cxx.o
CMakeFiles/helloDemo.dir/demo_b.cxx.o -o helloDemo -rdynamic
../Hello/libHello.a ../Hello/libcurl/libcurl_install/lib/libcurl.a
/usr/lib/x86_64-linux-gnu/libssl.a /usr/lib/x86_64-linux-gnu/libcrypto.a
-ldl -lpthread
The cmake equivalent changes would mean OpenSSL libs are included after
libcurl:
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})
target_link_libraries(curl INTERFACE OpenSSL::SSL OpenSSL::Crypto)
target_link_libraries(curl INTERFACE dl pthread)
You'd have to adjust that for your project but basically that's the
idea. I must reiterate I don't know much cmake. There are a few that do
know and hopefully they can chime in here. AFAICT this isn't a libcurl
problem. We can't be responsible for static linking dependencies.
[1]: https://curl.se/mail/etiquette.html#Do_Not_Top_Post
[2]: https://cmake.org/examples/
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.se/mail/etiquette.html
Received on 2021-02-25