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
Penjelasan:
Sebab utama ralat ini ialah libc tidak serasi binari dengan libstdc GCC. Khususnya:
Penyelesaian:
Untuk menyelesaikan isu ini, anda mesti membina semula Boost menggunakan Clang dengan libc sebagai perpustakaan standard:
clang++ -stdlib=libc++ ...
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!