很抱歉这是一个非常入门级的问题,但我对C++还比较陌生。
我正在使用 pistache 构建一个RESTful服务。我已经检查过并在项目本身中运行了示例,但现在正在尝试导入/包含该框架以在自己的项目中使用。
我的文件夹结构如下:
rest_api
|
+--- build
+--- include
|
+--- pistache
+--- src
|
+--- main.cpp
+--- tests
pistache
目录包含了pistache源代码的所有编译内容。
(我不确定这里是否需要整个项目或只是头文件)
我的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是直接从他们的示例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&)'
我看过类似这个问题,但对我没有帮助。
我的问题是:
- 我需要整个Pistache源代码还是只需要头文件?
- 我的CMakeLists.txt文件有什么问题导致出现这些错误?
如果这被视为重复问题,请原谅,因为我一直没有找到我需要的正确答案。
谢谢!
pistache_example
针对每个示例调用并链接可执行文件。(请注意,此CMakeLists.txt
不是独立的 - 它旨在从上层脚本中调用)。 - Tsyvarevtarget_link_libraries
添加到我的 CMake 中,现在它可以工作了。如果您发布一个答案,我会接受的。 - wmashtarget_link_libraries
。可能是重复的问题,参考 如何使用CMake正确链接库? 和 如何使用CMake将静态库链接到可执行文件中。 - jww