Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyelesaikan Isu Ketakserasian `std::__cxx11::string` dan `std::string` Apabila Memautkan Perpustakaan?

Bagaimana untuk Menyelesaikan Isu Ketakserasian `std::__cxx11::string` dan `std::string` Apabila Memautkan Perpustakaan?

Barbara Streisand
Lepaskan: 2024-12-19 00:39:10
asal
527 orang telah melayarinya

How to Resolve `std::__cxx11::string` and `std::string` Incompatibility Issues When Linking Libraries?

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&amp;, unsigned long, H5::DataType const&amp;) const'
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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