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; }
Menyusun kod ini mengakibatkan ralat berikut:
undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
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
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 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!