Rumah > pembangunan bahagian belakang > C++ > Mengapa Clang dengan libc dalam mod C 0x gagal memautkan contoh Boost::program_options?

Mengapa Clang dengan libc dalam mod C 0x gagal memautkan contoh Boost::program_options?

DDD
Lepaskan: 2024-11-02 15:21:30
asal
840 orang telah melayarinya

Why does Clang with libc   in C  0x mode fail to link Boost::program_options examples?

Mengapa tidak boleh berdentang dengan libc dalam mod c 0x memautkan contoh rangsangan::program_options ini?

Latar Belakang:

Apabila cuba untuk menyusun dan memautkan contoh Boost::program_options menggunakan Clang dalam mod C 0x dengan libc , ralat berikut berlaku:

Undefined symbols for architecture x86_64:
  // Various undefined symbols related to Boost::program_options
Salin selepas log masuk

Penjelasan:

Sebab utama ralat ini ialah libc tidak serasi binari dengan libstdc GCC. Khususnya:

  • Dalam libstdc , std::string dikira rujukan.
  • Dalam libc , std::string menggunakan "pengoptimuman rentetan pendek" (SSO), yang mempunyai memori yang berbeza susun atur dan tingkah laku.

Penyelesaian:

Untuk menyelesaikan isu ini, anda mesti membina semula Boost menggunakan Clang dengan libc sebagai perpustakaan standard:

clang++ -stdlib=libc++ ...
Salin selepas log masuk

Sebab Ketidakserasian Binari:

Untuk mengelakkan kemalangan ranap pencampuran dan masa jalan disebabkan ketidakserasian binari, libc memanfaatkan ciri ruang nama sebaris C 11 untuk mengubah suai ABI (Antara Muka Binari Aplikasi) std::string sambil mengekalkan API yang sama (Antara Muka Pengaturcaraan Aplikasi). Ini memastikan bahawa penghubung boleh membezakan antara std::string daripada libstdc dan std::string daripada libc .

Atas ialah kandungan terperinci Mengapa Clang dengan libc dalam mod C 0x gagal memautkan contoh Boost::program_options?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan