我在Windows上的Visual Studio 2019中使用boost-beast。在我向main.cpp添加一个现有的类之前,一切都是正常的。则其中一个.h文件无法打开boost文件。我将#include语句移到了.cpp文件中。它仍然失败,并显示相同的错误。
最简单的代码是:
#include <algorithm>
#include <iostream>
#include <boost/system/error_code.hpp>
#include "pml_webserver/pml_webserver.h"
#include "pml_webserver/product_factory.h"
#include "pml_webserver/config.h"
int main(int argc, char* argv[])
{
// omitted
}所有其他文件都已编译。Main.cpp导致此错误:
[4/12] Building CXX object CMakeFiles\pml_webserver.dir\src\main.cpp.obj
FAILED: CMakeFiles/pml_webserver.dir/src/main.cpp.obj
C:\PROGRA~2\MICROS~2\2019\PROFES~1\VC\Tools\MSVC\1421~1.277\bin\HostX64\x64\cl.exe /nologo /TP -IC:\Users\me\source\xplatform\core_pml_webserver\include -Iinclude /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /ZI /Ob0 /Od /RTC1 /JMC -std:c++17 /showIncludes /FoCMakeFiles\pml_webserver.dir\src\main.cpp.obj /FdCMakeFiles\pml_webserver.dir\ /FS -c C:\Users\me\source\xplatform\core_pml_webserver\src\main.cpp
C:\Users\me\source\xplatform\core_pml_webserver\include\pml_webserver\base_ws_handler.h(10): fatal error C1083: Cannot open include file: 'boost/system/error_code.hpp': No such file or directory我无法确定问题是与Cmake有关,还是由名称空间引起的,我对Cmake几乎没有经验。
编辑: CMakeLists.txt的一部分
cmake_minimum_required(VERSION 3.12)
project(pml_webserver CXX)
find_package(Boost 1.70.0 REQUIRED COMPONENTS system date_time)
configure_file(include/pml_webserver/config.h.in
${CMAKE_BINARY_DIR}/include/pml_webserver/config.h
)
add_library(pml_webserver_lib
src/webserver.cpp
src/base_ws_handler.cpp
src/ws_handler_factory.cpp
src/product_ws_handler.cpp
src/product_factory.cpp
set_target_properties(pml_webserver_lib PROPERTIES PREFIX "")
target_include_directories(pml_webserver_lib PUBLIC ${CMAKE_SOURCE_DIR}/include PUBLIC ${CMAKE_BINARY_DIR}/include)
target_link_libraries(pml_webserver_lib
PRIVATE Boost::system
PRIVATE Boost::date_time
)
add_executable(pml_webserver src/main.cpp)
target_link_libraries(pml_webserver pml_webserver_lib)我不知道CMAKE_SOURCE_DIR和CMAKE_BINARY_DIR是在哪里定义的。
发布于 2019-07-21 14:42:31
正如@drescherjm评论的那样,你的问题是boost的包含路径没有正确设置,
如果您使用的是cmake,那么您的CMakeLists.txt文件应该包含如下内容:
find_package(Boost REQUIRED COMPONENTS system)
if(Boost_FOUND)
target_include_directories(${PROJECT_NAME} PRIVATE ${Boost_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} PRIVATE Boost::system)
endif(Boost_FOUND)注意:您还应该将环境变量BOOST_ROOT和BOOST_LIBRARYDIR分别设置为boost根目录和库目录的位置,以便cmake可以找到boost。
如果您不习惯使用cmake,那么可以将boost根目录和库二进制目录的位置直接添加到Visual Studio中,如here所述。
https://stackoverflow.com/questions/57130198
复制相似问题