首页 > 后端开发 > C++ > 为什么在 C 1z 中使用 `experimental::filesystem` 时出现链接器错误?

为什么在 C 1z 中使用 `experimental::filesystem` 时出现链接器错误?

Patricia Arquette
发布: 2024-12-02 00:55:11
原创
467 人浏览过

Why am I Getting a Linker Error When Using `experimental::filesystem` in C  1z?

C 1z 中的实验性::文件系统链接器错误

在 GCC 6.0 的持续开发过程中尝试利用最新的 C 1z 功能时,会出现一个特殊的链接器错误:编译涉及实验性::filesystem标头的示例代码。

运行时问题会显现出来以下代码:

#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p1 = "/home/pete/checkit";
    std::cout << "p1 = " << p1 << std::endl;
}
登录后复制

编译此代码会导致以下错误:

undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
登录后复制

解决方案:

与最初的假设相反,文件系统 TS 不隶属于 C 1z,而是构成一个独特的规范。文件系统 TS 的 GCC 实现可以在 C 11 模式下访问。要解决链接错误,应将以下标志添加到链接命令中:

-lstdc++fs
登录后复制

此指令保证程序链接到包含实验::文件系统头的必要实现的适当库。

更新:

GCC 的后续版本(8.x 及更高版本)引入支持用于 C 17 文件系统库。它可以通过访问。标头和 std::filesystem 命名空间。在此实现实现稳定性之前,仍然需要链接到 -lstdc fs 才能利用这些功能。

从 GCC 9 开始,可以在没有 -lstdc fs 的情况下使用 C 17 std::filesystem 组件,而 std::experimental ::文件系统符号通过 GCC 13.3 中的 -lstdc exp 提供。

以上是为什么在 C 1z 中使用 `experimental::filesystem` 时出现链接器错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板