Apakah saya harus menggunakan libc ++ atau libstdc ++? [Tutup]

91

Saya sedang mengembangkan executable antarmuka baris perintah untuk osx dan linux menggunakan c / c ++. Proyek ini akan ditautkan ke opencv. Apakah saya harus menggunakan libc ++ atau libstdc ++?

Loozie
sumber
1
Saya tidak tahu, tetapi Anda mungkin menganggap ini menarik: clang-developers.42468.n3.nabble.com/…
DarenW
3
Jawaban ini semoga bermanfaat.
Yantao Xie
2
jika Anda menautkan ke opencv, gunakan libstdc ++. inilah alasan stackoverflow.com/questions/13037659/…
Loozie

Jawaban:

89

Saya akan menggunakan pustaka asli untuk setiap OS yaitu libstdc ++ di GNU / Linux dan libc ++ di Mac OS X.

libc ++ belum 100% selesai di GNU / Linux, dan tidak ada keuntungan nyata untuk menggunakannya saat libstdc ++ sudah lebih lengkap. Selain itu, jika Anda ingin menautkan ke pustaka lain yang ditulis dalam C ++, mereka hampir pasti dibuat dengan libstdc ++ sehingga Anda harus menautkannya juga untuk menggunakannya.

Info selengkapnya di sini tentang kelengkapan libc ++ di berbagai platform.

Jonathan Wakely
sumber
3
Bisakah Anda menjelaskan / memberikan link tentang status kelengkapan libc ++ di Linux? Saya tidak begitu mengerti mengapa ini akan menjadi platform khusus karena libc ++ hanyalah sekumpulan header Perpustakaan Standar. Atau maksud Anda seseorang perlu membangun pustaka runtime Clang wrt ke LLVM yang tidak didukung dengan baik di Linux?
TemplateRex
1
@TemplateRex, saya tidak tahu status saat ini, Anda dapat melihat di libcxx.llvm.org . Saya tidak mengikuti libc ++ jadi Anda bertanya kepada orang yang salah, tetapi apakah Anda menyarankan bahwa "sekumpulan header Perpustakaan Standar" tidak akan pernah memiliki kode khusus platform?
Jonathan Wakely
Karena Anda dapat menginstal Linux pada perangkat keras Apple yang hampir sama dengan yang menjalankan Mac OS X, saya bertanya-tanya dari mana asal ketergantungan platform pada header C ++? Mungkin beberapa pembungkus di sekitar intrinsik CPU bawaan atau IO dan hal-hal yang menangani pengecualian bergantung pada sistem, tetapi pemahaman saya adalah bahwa hal-hal seperti itu ditangani dalam jenis lapisan biner jenis librcxxrt. Bukankah tajuk Perpustakaan Standar seharusnya lebih atau kurang dapat dicolokkan?
TemplateRex
4
Saya tidak berbicara tentang perangkat keras. Sekali lagi, saya tidak tahu tentang libc ++, tetapi sebagian besar pustaka standar C ++ diimplementasikan melalui pustaka C OS, dan misalnya pemetaan dari std::ctype_base::masknilai ke <ctype.h>konstanta sepenuhnya bergantung pada platform. (Intrinsik CPU disediakan oleh compiler, penanganan pengecualian dilakukan oleh lapisan ABI tingkat rendah, tetapi IO biasanya dilakukan sepenuhnya di pustaka C ++ dan C, bukan barang tingkat rendah).
Jonathan Wakely
1
@abergmeier, itu argumen palsu, karena (saat digunakan dengan GCC atau proses kompilasi lain yang memenuhi syarat) libstdc ++ tidak memaksakan batasan apa pun pada kode yang menggunakannya, baik ditautkan secara dinamis atau statis. Ini bukan LGPL. Tolong jangan sebarkan FUD. gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what
Jonathan Wakely
30

Distribusi Linux utama tidak menyediakan LLVM libc ++, karena:

  1. Tidak seperti Apple dan FreeBSD, GPL + 3 tidak menjadi masalah, jadi tidak perlu menerapkan tumpukan lain di sini.
  2. Komponen Linux telah dikembangkan di sekitar GNU libstd ++ selama berabad-abad. Beberapa dari mereka tidak membangun yang lain.
  3. Meskipun libc ++ kuat dalam fitur-fitur baru, libc ++ memiliki beberapa masalah dengan kode lama.

Jika pada akhirnya libc ++ menjadi bagian dari distribusi, ini akan menjadi komponen opsional. menautkannya mungkin akan membutuhkan opsi tambahan.

Seperti kata Jonathan, Anda harus menggunakan alat apa pun yang disertakan secara default. Clang aman digunakan di Linux karena dikonfigurasi sebagai pengganti GCC, jadi dalam aspek itu Anda tidak perlu mengkhawatirkan 2 kompiler. Juga karena Anda menargetkan dua platform, Anda harus melihat untuk membuat.

Mario Vazquez
sumber
2
Clang bukanlah pengganti GCC ... Hanya kompiler lain.
Isaac Pascual
4
@IsaacPascual Yang dimaksud Mario adalah clang secara resmi memiliki tujuan desain untuk menjadi pengganti drop-in untuk kompiler terkemuka pada platform tempat Anda menjalankannya (misalnya gcc saat dijalankan di linux). Sama untuk kompiler intel afaik. Itu cara mereka untuk mendapatkan adopsi yang lebih luas.
Johan Boulé