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

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

Patricia Arquette
發布: 2024-12-02 00:55:11
原創
423 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板