Menukar __cxx11::string kepada std::string: Panduan Mengendalikan Perpustakaan Tidak Serasi
Menghadapi ketidakserasian antara std::__cxx11: :jenis rentetan dan std::rentetan biasa boleh menjadi isu yang mengecewakan. Apabila cuba antara muka dengan perpustakaan yang mungkin tidak dikonfigurasikan untuk C 11, keperluan timbul untuk menukar antara jenis ini. Walau bagaimanapun, hanya cuba menghantar std::__cxx11::string ke std::string menggunakan (string) tidak mencukupi.
Isu ini selalunya boleh nyata sebagai ralat pemaut, seperti:
undefined reference to `H5::CompType::insertMember(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, H5::DataType const&) const'
Memahami Ursache:
Satu sebab yang mungkin untuk ini ketidakserasian terletak pada penggunaan GCC 5. GCC 5 memperkenalkan dwi ABI untuk pustaka standard C, di mana kod yang disusun dengan satu ABI tidak boleh dipautkan dengan kod yang disusun dengan yang lain. Jika pustaka pihak ketiga telah disusun dengan ABI yang lebih lama semasa kod anda menggunakan ABI yang lebih baharu, isu pemautan boleh timbul.
Penyelesaian:
Untuk menyelesaikan isu ini , tentukan makro _GLIBCXX_USE_CXX11_ABI kepada 0 sebelum menyertakan sebarang pengepala perpustakaan standard. Ini memaksa GCC untuk menggunakan ABI yang lebih lama, memastikan keserasian dengan pustaka pihak ketiga.
#define _GLIBCXX_USE_CXX11_ABI 0 #include <iostream> #include <string>
Dengan makro ini ditakrifkan, pemaut harus berjaya menyelesaikan simbol dan penukaran daripada std::__cxx11 ::string ke std::string harus diteruskan tanpa ralat.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Isu Ketakserasian `std::__cxx11::string` dan `std::string` Apabila Memautkan Perpustakaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!