很抱歉,这是一个非常菜鸟的问题,但是我对C++还是很陌生。
我正在使用pistache构建RESTful服务。我已经检查了一下,并在项目本身中运行了示例,但是现在尝试导入/包括要在我自己的项目中使用的框架。
我的文件夹结构如下:

rest_api
   |
   +--- build
   +--- include
          |
          +--- pistache
   +--- src
          |
          +--- main.cpp
   +--- tests
pistache目录保存已编译的pistache source代码的所有
(我在这里不确定是否需要整个项目或仅需要头文件)
我尝试遵循examplequickstart指南,但是没有看。
我的 CMakeLists.txt 是准系统,目前看起来像这样:
cmake_minimum_required(VERSION 3.5.1)
project(rest_api)

set(CMAKE_CXX_STANDARD 14)
set(PISTACHE_DIR "./include/pistache")

include_directories (${PISTACHE_DIR}/include)

add_executable(${PROJECT_NAME} src/main.cpp)
我的 main.cpp 是其example hello_server.cc的直接拷贝。
当我尝试对项目进行make时,返回的异常(快照):
main.cpp:(.text+0x143): undefined reference to `Pistache::Port::Port(unsigned short)'
main.cpp:(.text+0x148): undefined reference to `Pistache::Ipv4::any()'
main.cpp:(.text+0x162): undefined reference to `Pistache::Address::Address(Pistache::Ipv4, Pistache::Port)'
main.cpp:(.text+0x171): undefined reference to `Pistache::Http::Endpoint::options()'
main.cpp:(.text+0x185): undefined reference to `Pistache::Http::Endpoint::Options::threads(int)'
main.cpp:(.text+0x1c9): undefined reference to `Pistache::Http::Endpoint::Endpoint(Pistache::Address const&)'
main.cpp:(.text+0x1e2): undefined reference to `Pistache::Http::Endpoint::init(Pistache::Http::Endpoint::Options const&)'
main.cpp:(.text+0x223): undefined reference to `Pistache::Http::Endpoint::setHandler(std::shared_ptr<Pistache::Http::Handler> const&)'
我看过诸如this之类的问题,但对我没有帮助。
我的问题是:
  • 我需要完整的Pistache源代码还是仅 header ?
  • 我的CMakeLists.txt中出了什么问题导致这些错误?

  • 抱歉,如果这被视为重复但未能找到我需要的正确答案。
    谢谢!

    最佳答案

    这是我的 CMakeLists.txt 文件。效果很好:D

    cmake_minimum_required(VERSION 3.12)
    project(PistacheExample)
    
    set(CMAKE_CXX_STANDARD 11)
    
    ############################
    ##      SOURCE FILES      ##
    ############################
    add_executable(${PROJECT_NAME} src/main.cpp)
    
    #####################################
    ##      HEADERS SEARCH PATHS       ##
    #####################################
    set(PROJECT_INCLUDE_DIR "src/include")
    set(PISTACHE_INCLUDE_DIR "libs/pistache/include")
    
    set(HEADER_SEARCH_PATHS ${PROJECT_INCLUDE_DIR} ${PISTACHE_INCLUDE_DIR})
    
    #####################################
    ##      LIBRARY SEARCH PATHS       ##
    #####################################
    set(PISTACHE_LIBRARY "${PROJECT_SOURCE_DIR}/libs/pistache/lib/libpistache.a")
    set(EXTRA_LIBRARY "-pthread -lssl")
    
    set(LIBRARIES_SEARCH_PATHS ${PISTACHE_LIBRARY} ${EXTRA_LIBRARY})
    
    #######################################
    ##      ADDING HEADERS LIBRARY       ##
    #######################################
    include_directories(${HEADER_SEARCH_PATHS})
    target_link_libraries(${PROJECT_NAME} ${LIBRARIES_SEARCH_PATHS})
    

    关于c++ - 在C++项目中包含Pistache,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52468551/

    10-10 07:54