首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++17中使用<filesystem>成员时出现链接错误

在C++17中使用<filesystem>成员时出现链接错误
EN

Stack Overflow用户
提问于 2018-02-11 15:29:53
回答 3查看 16.1K关注 0票数 26

我在Ubuntu16.04上使用的是gcc 7.2,并且我需要使用C++17的新文件系统库,即使确实有一个叫做实验性/文件系统的库,我也不能使用它的任何成员。例如,当我尝试编译此文件时:

代码语言:javascript
运行
复制
#include <iostream>
#include <string>
#include <experimental/filesystem>
using namespace std;
namespace fs = std::experimental::filesystem::v1;

int main(){
    fs::path p1 = "/usr/share/";
}

我得到一个编译错误,看起来像这样:

代码语言:javascript
运行
复制
$ 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>?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-11 15:41:07

添加标志-lstdc++fs

代码语言:javascript
运行
复制
$ g++-7 test.cpp -std=c++17 -lstdc++fs

gcc 7.2仅支持C++17实验性filesystem命名空间。我不知道,也许gcc 7.3已经支持标准filesystem命名空间了。

票数 19
EN

Stack Overflow用户

发布于 2018-11-29 10:57:28

在旧的g++和libstdc++版本中,您还可以sudo apt install g++-8并使用#include <filesystem>作为of首选项,而不是#include <experimental/filesystem>

如果我在Ubuntu上安装了gcc 8,我会有两个不同的libstdc++库,还是只有原来的一个得到更新?

你可能会有两个,即使新的应该可以作为旧的临时替换。

我注意到随g++-8一起安装了一个libstdc++-8-dev

这对我来说很有效:

g++-8 -g -Wall -std=c++17 test.cpp -lstdc++fs

似乎即使使用g++-8,文件系统库也不会自动链接,您仍然需要提供-lstdc++fs,并且在语言级别上也需要-std=c++17

票数 8
EN

Stack Overflow用户

发布于 2020-10-26 16:12:43

下面的内容对我很有效:

在代码中:

代码语言:javascript
运行
复制
#include <filesystem>
namespace filesystem = std::filesystem;

在CMakeLists中:

代码语言:javascript
运行
复制
set (CMAKE_CXX_FLAGS "-lstdc++fs -std=c++17")

在Ubuntu 18.04和GCC 10上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48729328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档