Mengapa berdenting dengan libc dalam Mod C 0x Gagal Pautan Boost::Program_Options Contoh
Coretan yang diberikan menunjukkan isu semasa cuba menyusun dan boost link::program_options dengan clang menggunakan libc dalam mod C 0x.
Analisis Masalah
Ralat penyusunan berpunca daripada ketidakserasian antara libc dan libstdc , standard lalai perpustakaan dilaksanakan oleh g . libc menggunakan butiran pelaksanaan yang berbeza untuk std::string, memperkenalkan perbezaan ABI (Antara Muka Binari Aplikasi) daripada libstdc .
Penyelesaian
Untuk menyelesaikan isu ini, adalah perlu untuk membina semula Boost menggunakan clang dengan bendera -stdlib=libc. Ini memastikan bahawa pustaka Boost disusun terhadap pustaka standard yang sama dengan pustaka boleh laku yang dipautkan. Ia menyelaraskan ABI std::string merentas perpustakaan Boost dan program yang sedang disusun.
Penjelasan Teknikal
libc memanfaatkan ruang nama sebaris untuk mengubah ABI std: : string tanpa mengubah suai APInya. Ini mewujudkan percanggahan yang dirasakan antara kedua-dua perpustakaan, di mana std::string daripada libstdc dan std::__1::string daripada libc dianggap sebagai struktur data yang berbeza oleh pemaut.
Dengan membina semula Boost dengan standard yang sesuai perpustakaan, definisi simbol untuk boost::program_options sepadan dengan yang diharapkan oleh pemaut, membolehkan pemautan berjaya.
Atas ialah kandungan terperinci Mengapa Clang dengan libc dalam Mod C 0x Gagal Menghubungkan Boost::Program_Options?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!