链接错误 - openSSL到libcurl

时间:2017-05-28 11:17:51

标签: cmake openssl travis-ci libcurl

我正在使用libcURL做C ++。我完成了在Travis CI中测试功能的任务。所以我使用.travis.yml来获取libcurl-dev和libssl-dev来连接到项目。我安装了它们并检查了cURL配置:
    SSL support: enabled (OpenSSL)

但是当我试图制作主要测试文件时,我得到了错误列表(例子)

`Linking CXX executable ../bin/TechProject_example
/usr/local/lib/libcurl.a(libcurl_la-openssl.o): In function ossl_recv:
openssl.c:(.text+0xf3): undefined reference to ERR_clear_error
openssl.c:(.text+0x11c): undefined reference to SSL_read
openssl.c:(.text+0x163): undefined reference to SSL_get_error`

依旧......

我唯一可以检查的是libcurl正常工作。我放了     --without-ssl标记并出现协议错误。

我也用过

`- sudo ln -fs /usr/lib/libcurl.so.4 /usr/local/lib/` 

避免cmake错误。 (我不太擅长UNIX命令,所以这可能是个问题)

那么应该如何正确地将openSSL连接到具有<curl/curl.h>

的C ++项目

编辑: 这是CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project (TechProject)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(HEADERS ${PROJECT_SOURCE_DIR}/include/testclass.h)
set(HEADERS ${PROJECT_SOURCE_DIR}/include/catch.hpp)
set(SOURCES ${PROJECT_SOURCE_DIR}/sources/testclass.cpp)



set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)


include_directories(${PROJECT_SOURCE_DIR}/include)

add_library (${PROJECT_NAME} STATIC ${SOURCES})

add_subdirectory(example)
add_subdirectory(tests)

find_library(FOO_LIB libcurl.a)
target_link_libraries(TechProject "${FOO_LIB}")

测试中的CMakeLists.txt子目录:

cmake_minimum_required(VERSION 2.8)

set(TESTS_FOR_PROJECT TechProject)

project(${TESTS_FOR_PROJECT}_tests)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)

file(GLOB ${PROJECT_NAME}_sources "${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp")

find_package(${TESTS_FOR_PROJECT})
include_directories(${${TESTS_FOR_PROJECT}_INCLUDE_DIRS}})


include_directories(${CPM_INCLUDE_DIRS})

add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_sources} ${${PROJECT_NAME}_headers})


target_link_libraries(${PROJECT_NAME} ${TESTS_FOR_PROJECT})


add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
               COMMAND ${CMAKE_COMMAND} -E copy_directory
                   ${CMAKE_CURRENT_SOURCE_DIR}/fixtures $<TARGET_FILE_DIR:${PROJECT_NAME}>)

add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${PROJECT_NAME} -s -r compact WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

0 个答案:

没有答案