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
757 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!

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