使用 <filesystem> C++17 中的成员的链接错误
Link errors using <filesystem> members in C++17
我在 Ubuntu 7.2 上使用 gcc 16.04,我需要使用 C++17 的新文件系统库。即使确实有一个名为实验/文件系统的库,我也不能使用它的任何成员。例如,当我尝试编译此文件时:
#include <iostream>
#include <string>
#include <experimental/filesystem>
using namespace std;
namespace fs = std::experimental::filesystem::v1;
int main(){
fs::path p1 = "/usr/share/";
}
我收到一个编译错误,如下所示:
$ g++-7 test.cpp -std=c++17
/tmp/ccfsMnlG.o: In function `std::experimental::filesystem::v1::__cxx11::path::path<char [12], std::experimental::filesystem::v1::__cxx11::path>(char const (&) [12])':
test.cpp:(.text._ZNSt12experimental10filesystem2v17__cxx114pathC2IA12_cS3_EERKT_[_ZNSt12experimental10filesystem2v17__cxx114pathC5IA12_cS3_EERKT_]+0x73): undefined reference to `st
d::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status
我做错了什么?我不认为代码有什么问题,因为我只是从网站上复制粘贴了它。我是否使用了错误版本的 gcc?另外,为什么我需要<experimental/filesystem>
而不是在 C++17 中<filesystem>
?提前谢谢。
添加标志-lstdc++fs
:
$ g++-7 test.cpp -std=c++17 -lstdc++fs
GCC 7.2 仅支持 C++17 实验性filesystem
命名空间。我不知道,也许 gcc 7.3 已经支持 stdfilesystem
命名空间。
您还可以sudo apt install g++-8
并使用#include <filesystem>
作为描述的cpp首选项,而不是在较旧的g++和libstdc++版本中#include <experimental/filesystem>
。
如果我在 Ubuntu 中安装 gcc 8,我会有 2 个不同的 libstdc++ 库还是只更新原始库?
您可能会有两个,即使较新的应该作为旧替代品。
我注意到libstdc++-8-dev
与g++-8
一起安装.
这对我有用:
g++-8 -g -Wall -std=c++17 test.cpp -lstdc++fs
看来即使使用 g++-8,文件系统库也不会自动链接,你仍然需要提供-lstdc++fs
,语言级别也需要-std=c++17
。
以下内容对我有用:
在代码中:
#include <filesystem>
namespace filesystem = std::filesystem;
在CMakeLists中:
set (CMAKE_CXX_FLAGS "-lstdc++fs -std=c++17")
在带有 GCC 10 的 Ubuntu 18.04 上。
一个尚未提及的让我躲避了几个小时的基本要素是在默认的CMakeLists中.txt:
target_compile_features(compare_files PUBLIC cxx_std_11)
需要改为:
target_compile_features(compare_files PUBLIC cxx_std_17)
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 类和类成员的链接
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- C++ - 使用 std::list,如何打印对象的私有成员的链接列表?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- 单独库中的类成员函数定义和链接依赖项
- emplace_back会导致静态 constexpr 成员上出现链接错误
- 类中常量成员函数的 c++ 链接错误
- C :(不重复)积分静态成员初始化(不仅是声明!),导致链接器错误,原因
- 获取 constexpr 全局变量(不是静态成员)的链接器符号
- 使用 <filesystem> C++17 中的成员的链接错误
- gcc 和 clang 中 constexpr 静态成员变量的链接器错误
- (C++)(链接错误)模板成员函数上未解析的外部
- 静态成员函数访问静态私有变量时的链接器错误
- 关于在 ndk r15 中的类中初始化的静态成员的不满意链接错误
- 为什么添加静态数据成员会导致链接器失败
- 类模板的成员函数模板找不到定义,尽管存在显式实例化。不链接
- C++ 使用 .chain().method() 链接成员函数 vers ->chained(0->method()
- 静态成员初始化链接错误
- 命名空间和静态类成员链接