首頁 >後端開發 >C++ >為什麼在 C 1z 中使用 `experimental::filesystem` 時出現連結器錯誤?

為什麼在 C 1z 中使用 `experimental::filesystem` 時出現連結器錯誤?

Patricia Arquette
Patricia Arquette原創
2024-12-02 00:55:11418瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn