1
所以,我试图编译我的程序已restbed作为依赖。 我已经编译restbed用下面的命令:链接器错误使用restbed
cmake -DBUILD_TESTS=NO -DBUILD_SSL=YES -DBUILD_SHARED=NO
make -j4 install
编译restbed不会导致任何错误。
现在的问题:
我使用的是从这里的源代码示例:https://github.com/Corvusoft/restbed
这是我CMakeLists:
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。
我希望你们任何人都可以帮我解决这个问题。这让我疯狂。
如果您需要更多信息,请告诉我,我将编辑此帖子。
“我的猜测”。这听起来像是100%肯定的赌注。你确定你知道'-DBUILD_SSL'的作用吗? –
链接器没有找到这些符号,因为它们驻留的库没有被指定。在快速查看错误时,看起来好像必须将'-lpthread -lcrypto -lssl'传递给链接器(当然这3个库应该放在'LD_LIBRARY_PATH'中)。不知道如何在“_cmake_语法”中翻译它。 – CristiFati
嗯,我没有想过添加这些额外的库,愚蠢的我......无论如何。它现在工作 – Hibbel