【发布时间】:2016-02-04 19:18:39
【问题描述】:
所以,我正在尝试编译我的程序,该程序将 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 在他的声明中是正确的。您可以在下面找到我们使用的 cmake 模块。