Rumah > pembangunan bahagian belakang > C++ > Mengapakah Saya Mendapat Ralat Penyambung Apabila Menggunakan `percubaan::sistem fail` dalam C 1z?

Mengapakah Saya Mendapat Ralat Penyambung Apabila Menggunakan `percubaan::sistem fail` dalam C 1z?

Patricia Arquette
Lepaskan: 2024-12-02 00:55:11
asal
504 orang telah melayarinya

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

experimental::filesystem Linker Error in C 1z

Dalam percubaan untuk menggunakan ciri C 1z terbaharu di tengah-tengah pembangunan berterusan GCC 6.0, ralat pemaut yang pelik timbul apabila menyusun kod sampel yang melibatkan eksperimen::sistem fail pengepala.

Isu ini menjelma sendiri apabila menjalankan kod berikut:

#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
    fs::path p1 = "/home/pete/checkit";
    std::cout << "p1 = " << p1 << std::endl;
}
Salin selepas log masuk

Menyusun kod ini mengakibatkan ralat berikut:

undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
Salin selepas log masuk

Penyelesaian:

Bertentangan dengan andaian awal, TS Sistem Fail tidak bergabung dengan C 1z tetapi membentuk spesifikasi yang berbeza. Pelaksanaan GCC bagi TS Sistem Fail boleh diakses dalam mod C 11. Untuk menyelesaikan ralat pemautan, bendera berikut harus ditambahkan pada arahan pemautan:

-lstdc++fs
Salin selepas log masuk

Arahan ini menjamin bahawa program memaut dengan perpustakaan yang sesuai yang mengandungi pelaksanaan yang diperlukan untuk pengepala sistem fail eksperimen::.

Kemas kini:

Versi GCC seterusnya (8.x dan ke atas) memperkenalkan sokongan untuk pustaka Sistem Fail C 17. Ia boleh diakses melalui pengepala dan ruang nama std::filesystem. Sehingga pelaksanaan ini mencapai kestabilan, pemautan terhadap -lstdc fs masih diperlukan untuk menggunakan ciri ini.

Sehingga GCC 9, komponen sistem fail C 17 std::filesystem boleh digunakan tanpa -lstdc fs, manakala std::experimental ::simbol sistem fail disediakan melalui -lstdc exp dalam GCC 13.3.

Atas ialah kandungan terperinci Mengapakah Saya Mendapat Ralat Penyambung Apabila Menggunakan `percubaan::sistem fail` dalam C 1z?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan