<filesystem> 在 clang 6 和 10 上 #include 错误

error on #include <filesystem> on clang 6 and 10

本文关键字:#include 错误 clang lt filesystem gt      更新时间:2023-10-16

我得到这个:

No such file or directory
#include <filesystem>

#if __cplusplus >= 201703L
#include <filesystem>
#endif

尝试使用 clang 6.0 进行编译时。不幸的是,我无法移动到experimental/filesystem,因为它不是我的库,而是OpenVPN3。我尝试使用clang 10,但仍然收到错误。

如果我无法修改OpenVPN3,我有什么选择?

我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)
project(ovpncli)
set (PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/..)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_MODULE_PATH "${PROJECT_ROOT}/openvpn3/cmake;${CMAKE_MODULE_PATH}")
include(findcoredeps)
set(LIBTINS_BUILD_SHARED OFF CACHE BOOL "enable X functionality" FORCE)
set(LIBTINS_ENABLE_PCAP OFF CACHE BOOL "enable X functionality" FORCE)
set(PCAP_INCLUDE_DIR "")
set(PCAP_LIBRARY "")
add_subdirectory(${PROJECT_ROOT}/libtins _libtins)
add_subdirectory(${PROJECT_ROOT}/literal_ipaddr _literal_ipaddr)
add_subdirectory(${PROJECT_ROOT}/smoltcp_cpp_interface smoltcp_cpp_interface)
set(KOVPN_SOURCE "${CORE_DIR}/../kovpn" CACHE PATH "ovpn-dco kernel module source tree")
include_directories(${PROJECT_ROOT}/openvpn3/)
include_directories(${PROJECT_ROOT}/libtins/include)
include_directories(${PROJECT_ROOT}/asio/asio/include)
include_directories(${PROJECT_ROOT}/literal_ipaddr)

add_executable(libopenvpn_example OpenVPNClient.cpp)
add_dependencies(libopenvpn_example tins literal_ipaddr)
set_property(TARGET libopenvpn_example PROPERTY CXX_STANDARD 17)
target_link_libraries(libopenvpn_example tins literal_ipaddr)
add_core_dependencies(libopenvpn_example)

详细:

cd /workspaces/libopenvpnclient/build/src && /usr/local/clang/bin/clang++  -DASIO_STANDALONE -DHAVE_LZ4 -DLZ4_DISABLE_DEPRECATE_WARNINGS -DMBEDTLS_DEPRECATED_REMOVED -DUSE_ASIO -DUSE_OPENSSL -I/workspaces/libopenvpnclient/src/../openvpn3 -I/workspaces/libopenvpnclient/src/../libtins/include -I/workspaces/libopenvpnclient/src/../asio/asio/include -I/workspaces/libopenvpnclient/src/../literal_ipaddr -I/workspaces/libopenvpnclient/openvpn3/cmake/.. -I/workspaces/libopenvpnclient/openvpn3/cmake/../../deps/asio/asio/include  -Wall -Wsign-compare -Wno-missing-field-initializers -std=c++1z -o CMakeFiles/libopenvpn_example.dir/OpenVPNClient.cpp.o -c /workspaces/libopenvpnclient/src/OpenVPNClient.cpp

如果使用libstdc++验证您至少具有版本 9 或添加-lstdc++fs...

运行时库 (libstdc++(

  • 改进了对 C++17 的支持,包括:
    • C++17 实现不再是实验性的。
    • 并行算法和<execution>(需要线程构建块 2018 或 较新(。
    • <memory_resource>.
    • 现在使用<filesystem>中的类型和函数不需要与 -lstdc++fs 链接。

参考: https://gcc.gnu.org/gcc-9/changes.html#libstdcxx

相关文章: