Libc ++ veya libstdc ++ kullanmalı mıyım? [kapalı]


91

C / c ++ kullanarak hem osx hem de linux için komut satırı arabirimi çalıştırılabilir dosyaları geliştiriyorum. Proje, opencv ile bağlantı kuracak. Libc ++ veya libstdc ++ kullanmalı mıyım?


1
Bilmiyorum, ama bunu ilginizi çekebilir: clang-developers.42468.n3.nabble.com/…
DarenW


2
opencv ile bağlantı kurarsanız, libstdc ++ kullanın. işte bu yüzden stackoverflow.com/questions/13037659/…
Loozie

Yanıtlar:


89

Her işletim sistemi için yerel kitaplığı, yani GNU / Linux'ta libstdc ++ ve Mac OS X'te libc ++ kullanırdım.

libc ++, GNU / Linux üzerinde% 100 tamamlanmış değildir ve libstdc ++ daha tamamlandığında onu kullanmanın gerçek bir avantajı yoktur. Ayrıca, C ++ ile yazılmış diğer kitaplıklara bağlanmak istiyorsanız, bunlar neredeyse kesinlikle libstdc ++ ile oluşturulmuş olacaktır, bu yüzden onları kullanmak için onunla da bağlantı kurmanız gerekir.

Çeşitli platformlarda libc ++ tamlığı hakkında daha fazla bilgi burada .


3
Linux'ta libc ++ 'nın tamlık durumu hakkında ayrıntılı bağlantılar verebilir / sağlayabilir misiniz? Libc ++ sadece bir grup Standart Kitaplık başlığı olduğundan, bunun neden platforma özgü olduğunu tam olarak anlamıyorum. Veya Linux'ta iyi desteklenmeyen LLVM çalışma zamanı kitaplıklarına Clang wrt oluşturması gerektiğini mi söylüyorsunuz?
TemplateRex

1
@TemplateRex, şu anki durumunu bilmiyorum, libcxx.llvm.org'a bakabilirsiniz . Libc ++ 'yı takip etmiyorum, bu yüzden yanlış kişiye soruyorsunuz, ancak "bir grup Standart Kitaplık başlığının" platforma özel hiçbir kod içermeyeceğini mi söylüyorsunuz?
Jonathan Wakely

Linux'u Mac OS X çalıştıran hemen hemen aynı Apple donanımına yükleyebildiğiniz için, C ++ başlıklarındaki platform bağımlılığının nereden geleceğini merak ediyorum? Belki yerleşik CPU içselleri veya IO ve istisna işleme unsurları etrafındaki bazı sarmalayıcılar sisteme bağlıdır, ancak benim anladığım kadarıyla bu tür şeyler librcxxrt tipi ikili katmanlarda ele alınır. Standart Kitaplık başlıklarının aşağı yukarı takılabilir olması gerekmiyor mu?
TemplateRex

4
Ben donanımdan bahsetmiyorum. Yine, libc ++ hakkında hiçbir fikrim yok, ancak çoğu C ++ standart kitaplığı, işletim sisteminin C kitaplığı üzerinden uygulanmaktadır ve örneğin std::ctype_base::maskdeğerlerden <ctype.h>sabitlere eşleme tamamen platforma bağlıdır. (CPU iç bilgileri derleyici tarafından sağlanır, istisna işleme düşük seviyeli bir ABI katmanı tarafından yapılır, ancak GÇ genellikle tamamen C ++ ve C kitaplıklarında yapılır, düşük seviyeli şeyler değil).
Jonathan Wakely

1
@abergmeier, bu sahte bir argümandır, çünkü (GCC veya diğer uygun derleme işlemleriyle kullanıldığında) libstdc ++, dinamik veya statik olarak bağlanmış olsun, kodun kullanılmasına herhangi bir kısıtlama getirmez. LGPL değil. Lütfen FUD'yi yaymayın. gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what
Jonathan Wakely

30

Başlıca Linux dağıtımları LLVM libc ++ sağlamaz çünkü:

  1. Apple ve FreeBSD'nin aksine, GPL + 3 bir sorun değildir, bu yüzden burada başka bir yığın uygulamaya gerek yoktur.
  2. Linux bileşenleri, uzun zamandır GNU libstd ++ çevresinde geliştirilmiştir. Bazıları başka hiçbir şeye dayanmıyor.
  3. Libc ++ yeni özelliklerde güçlü olsa da, eski kodla bazı sorunları vardır.

Sonunda libc ++ dağıtımların bir parçası olduysa, isteğe bağlı bir bileşen olacaktır. buna karşı bağlantı kurmak muhtemelen ekstra seçenekler gerektirecektir.

Jonathan'ın dediği gibi, varsayılan olarak dahil edilen aracı kullanmalısınız. Clang, bir GCC ikamesi olarak yapılandırıldığı için Linux'ta güvenlidir, bu nedenle 2 derleyici için endişelenmenize gerek yoktur. Ayrıca iki platformu hedeflediğiniz için cmake'ye bir göz atmalısınız.


2
Clang bir GCC ikamesi değildir ... Sadece başka bir derleyici.
Isaac Pascual

4
@IsaacPascual Mario'nun kastettiği, clang'ın resmi olarak tasarım hedeflerinde, onu çalıştırdığınız platformda öne çıkan derleyicinin yerine geçme (örneğin, linux üzerinde çalıştırıldığında gcc) olması gerektiğidir. Intel'in derleyicisi afaik için de aynı. Bu onların daha geniş bir benimsenme yolu.
Johan Boule
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.