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
417 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!

sumber:php.cn
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