首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接器使用restbed错误

链接器使用restbed错误
EN

Stack Overflow用户
提问于 2016-02-04 19:18:39
回答 1查看 1.6K关注 0票数 2

因此,我正在试图编译我的程序,它将restbed作为依赖项。我已经用以下命令编译了restbed:

代码语言:javascript
复制
cmake -DBUILD_TESTS=NO -DBUILD_SSL=YES -DBUILD_SHARED=NO
make -j4 install

编译restbed不会导致任何错误。

现在的问题是:

我正在使用这里的源代码示例:https://github.com/Corvusoft/restbed

这是我的CMakeLists:

代码语言:javascript
复制
cmake_minimum_required (VERSION 2.6)
project(FDRService CXX)

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

set(CMAKE_BINARY_DIR "./build")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

# FD Variables
set(FDRService_VERSION_MAJOR 1)
set(FDRService_VERSION_MINOR 0)

set(FDRService_INCLUDE_DIR "./include")
set(FDRService_SOURCE_DIR "./src")

# RestBED
set(RESTBED_ROOT "dependency/restbed/distribution")
set(RESTBED_INCLUDE_DIR "${RESTBED_ROOT}/include")
set(RESTBED_LIBRARY_DIR "${RESTBED_ROOT}/library")

# find all libraries
file(GLOB_RECURSE RESTBED_LIBRARY_FILES
    "${RESTBED_LIBRARY_DIR}/*.a"
)

include_directories(${RESTBED_INCLUDE_DIR})

# find project source files
file(GLOB_RECURSE FDRService_FILES
    "${FDRService_INCLUDE_DIR}/*.h"
    "${FDRService_INCLUDE_DIR}/*.hpp"
    "${FDRService_SOURCE_DIR}/*.c"
    "${FDRService_SOURCE_DIR}/*.cpp"
)

add_executable(FDRService ${FDRService_FILES})
target_link_libraries(FDRService ${RESTBED_LIBRARY_FILES})

当我试图编译我的项目时,我会得到以下链接器错误:

http://pastebin.com/hXPmAV2W (对StackOverflow来说文本太多.)

我的猜测是,OpenSSL库没有链接到restbed的静态.a文件中,但是我将-DBUILD_SSL放在build命令中。

我希望你们中的任何人都能帮我解决这个问题。快把我逼疯了。

如果你需要更多的信息,只要告诉我,我会编辑这篇文章。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-08 00:15:07

我们使用以下cmake模块来定位依赖于Restbed的项目所需的依赖项。

Findrestbed.cmake

代码语言:javascript
复制
find_path( restbed_SOURCE CMakeLists.txt HINTS "${CMAKE_SOURCE_DIR}/dependency/restbed" )

if ( restbed_SOURCE )
    set( restbed_FOUND TRUE )
    set( restbed_BUILD "${CMAKE_CURRENT_BINARY_DIR}/restbed_build" )
    set( restbed_DISTRIBUTION "${CMAKE_CURRENT_BINARY_DIR}/distribution" )

    include( ExternalProject )
    ExternalProject_Add( restbed SOURCE_DIR ${restbed_SOURCE}
                         PREFIX restbed_build
                         INSTALL_DIR ${restbed_DISTRIBUTION}
                         CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${restbed_DISTRIBUTION} -DBUILD_SSL=${BUILD_SSL} -DBUILD_SHARED=NO )

    set( restbed_INCLUDE "${restbed_DISTRIBUTION}/include" )
    set( restbed_LIBRARY "${restbed_DISTRIBUTION}/library/${CMAKE_STATIC_LIBRARY_PREFIX}restbed${CMAKE_STATIC_LIBRARY_SUFFIX}" )

    message( STATUS "${Green}Found Restbed include at: ${restbed_SOURCE}${Reset}" )
else ( )
    message( FATAL_ERROR "${Red}Failed to locate Restbed dependency.${Reset}" )
endif ( )

Findopenssl.cmake

代码语言:javascript
复制
find_library( ssl_LIBRARY ssl ssleay32 HINTS "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl/out32dll" "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl" "/usr/lib" "/usr/local/lib" "/opt/local/lib" )
find_library( crypto_LIBRARY crypto libeay32 HINTS "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl/out32dll" "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl" "/usr/lib" "/usr/local/lib" "/opt/local/lib" )
find_path( ssl_INCLUDE openssl/ssl.h HINTS "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl/inc32" "${CMAKE_SOURCE_DIR}/dependency/restbed/dependency/openssl/include" "/usr/include" "/usr/local/include" "/opt/local/include" )

if ( ssl_INCLUDE AND ssl_LIBRARY AND crypto_LIBRARY )
    set( OPENSSL_FOUND TRUE )
    add_definitions( -DBUILD_SSL=TRUE )

    if ( APPLE AND BUILD_SSL )
        set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations" )
    endif( )

    message( STATUS "${Green}Found OpenSSL library at: ${ssl_LIBRARY}${Reset}" )
    message( STATUS "${Green}Found OpenSSL include at: ${ssl_INCLUDE}${Reset}" )
    message( STATUS "${Green}Found Crypto library at: ${crypto_LIBRARY}${Reset}" )
else ( )
    message( FATAL_ERROR "${Red}Failed to locate OpenSSL dependency. see dependency/restbed/dependency/openssl; ./config shared; make all${Reset}" )
endif ( )

您可以在RestQ GIT存储库上看到这方面的一个示例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35209692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档