【问题标题】:undefined reference when using experimental/filesystem使用实验/文件系统时未定义的引用
【发布时间】:2018-08-21 07:21:28
【问题描述】:

我正在尝试使用代码运行器在 Visual Studio 代码中编译一个带有 Experimental::filesystem 的项目,但是即使在终端中我也无法编译它。

代码如下,来自文档的一个非常简单的测试用法:

#include <iostream>
#include<experimental/filesystem>
using namespace std;
namespace fs = std::experimental::filesystem;

int main(){
    fs::create_directories("sandbox/a/b");
    cout << "done.";
    return 0;
}

编译

g++ -std=c++17 $fullFileName && ./a.out -lstdc++fs

在代码运行器配置中或仅使用

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

在终端中不编译或一般不工作。

它提供的错误是:

/tmp/cco0g7Qf.o: In function `main':
test.cpp:(.text+0x24): undefined reference to `std::experimental::filesystem::v1::create_directories(std::experimental::filesystem::v1::__cxx11::path const&)'
/tmp/cco0g7Qf.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_]+0x64): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status

任何帮助都将不胜感激,我正在运行 linux 并且已经检查以确保我的 libstdc++ 与我的 gcc 一起是最新的。

【问题讨论】:

    标签: c++ gcc filesystems undefined-reference


    【解决方案1】:

    以下命令行非常适合我(Ubuntu 17.10 上的 GCC 7.2.0):

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

    请注意,当您在命令行中省略 -lstdc++fs 或将其放在 test.cpp 之前时,链接将失败并出现您观察到的 undefined reference 错误。

    【讨论】:

    • 我是个白痴,在终端中我运行的 main.cpp 有其他错误。在 Visual Studio 代码中,我将它放在它运行的文件 ./a.out 之后,而不是它编译的位置。将它放在 && 之前解决了这个问题。
    • 使用c++17文件系统库时需要-lstdc++fs标志吗?如,不是实验性的?我收到与 std::filesystem::create_directories(std::filesystem::path const&) 相同的未定义引用错误
    • @IronAttorney 我猜这来晚了,但其他人可以看到 Jonathan Wakely 的this answer
    • @IronAttorney 我发现我需要 g++ -std=g++XX 或 -std=c++XX, XX 针对 C++17 或 C++2a/20 进行编译,情况都是如此。
    • 是的,我同样注意到它最近使用最新的 GCC 和 C++ 以及 C++ 17 和 20 可以正常工作,不会乱用额外的标志
    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2014-04-29
    • 2017-10-21
    • 1970-01-01
    相关资源
    最近更新 更多