Dovrei usare libc ++ o libstdc ++? [chiuso]


91

Sto sviluppando eseguibili dell'interfaccia della riga di comando per OSX e Linux utilizzando c / c ++. Il progetto si collegherà contro opencv. Dovrei usare libc ++ o libstdc ++?


1
Non lo so, ma potresti trovare questo interessante: clang-developers.42468.n3.nabble.com/…
DarenW

3
Questa risposta può essere utile.
Yantao Xie

2
se ti colleghi a opencv, usa libstdc ++. ecco perché stackoverflow.com/questions/13037659/...
Loozie

Risposte:


89

Vorrei utilizzare la libreria nativa per ogni sistema operativo, ad esempio libstdc ++ su GNU / Linux e libc ++ su Mac OS X.

libc ++ non è completo al 100% su GNU / Linux e non c'è alcun vantaggio nell'usarlo quando libstdc ++ è più completo. Inoltre, se vuoi collegarti a qualsiasi altra libreria scritta in C ++, quasi sicuramente sarà stata compilata con libstdc ++, quindi dovrai collegarti anche a quella per usarle.

Maggiori informazioni qui sulla completezza di libc ++ su varie piattaforme.


3
Potreste elaborare / fornire collegamenti sullo stato di completezza di libc ++ su Linux? Non capisco bene perché questo sia specifico della piattaforma poiché libc ++ è solo un mucchio di intestazioni della libreria standard. O vuoi dire che è necessario compilare Clang rispetto alle librerie di runtime LLVM che non sono ben supportate su Linux?
TemplateRex

1
@TemplateRex, non conosco lo stato attuale, puoi guardare libcxx.llvm.org . Non seguo libc ++ quindi stai chiedendo alla persona sbagliata, ma stai suggerendo che "un mucchio di intestazioni della libreria standard" non avrà mai alcun codice specifico della piattaforma?
Jonathan Wakely,

Bene, dal momento che puoi installare Linux praticamente sullo stesso hardware Apple che esegue Mac OS X, mi chiedo da dove verrebbe la dipendenza dalla piattaforma nelle intestazioni C ++? Forse alcuni wrapper attorno agli elementi intrinseci della CPU incorporati o alle cose di gestione dell'IO e delle eccezioni dipendono dal sistema, ma la mia comprensione era che tali cose sono gestite nel tipo librcxxrt di livelli binari. Le intestazioni della libreria standard non dovrebbero essere più o meno collegabili?
TemplateRex

4
Non sto parlando di hardware. Ancora una volta, non ho idea di libc ++, ma la maggior parte delle librerie standard C ++ sono implementate sulla libreria C del sistema operativo, e ad esempio la mappatura dai std::ctype_base::maskvalori alle <ctype.h>costanti dipende interamente dalla piattaforma. (Gli elementi intrinseci della CPU sono forniti dal compilatore, la gestione delle eccezioni viene eseguita da un livello ABI di basso livello, ma l'IO è tipicamente fatto interamente nelle librerie C ++ e C, non cose di basso livello).
Jonathan Wakely,

1
@abergmeier, questo è un argomento fasullo, perché (se usato con GCC o altri processi di compilazione idonei) libstdc ++ non impone alcuna restrizione al codice che lo utilizza, sia collegato dinamicamente che staticamente. Non è la LGPL. Per favore, non diffondere FUD. gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.license.what
Jonathan Wakely,

30

Le principali distribuzioni Linux non forniscono LLVM libc ++, perché:

  1. A differenza di Apple e FreeBSD, la GPL + 3 non è un problema, quindi non c'è bisogno di implementare un altro stack qui.
  2. I componenti Linux sono stati sviluppati intorno a GNU libstd ++ per secoli. Alcuni di loro non si basano su nient'altro.
  3. Sebbene libc ++ sia forte nelle nuove funzionalità, ha alcuni problemi con il codice legacy.

Se alla fine libc ++ diventerà parte delle distribuzioni, sarà un componente opzionale. il collegamento contro di esso richiederà probabilmente opzioni extra.

Come ha detto Jonathan, dovresti usare qualsiasi strumento incluso per impostazione predefinita. Clang è sicuro in Linux da usare poiché è configurato come un sostituto di GCC, quindi in questo aspetto non devi preoccuparti di 2 compilatori. Inoltre, poiché stai prendendo di mira due piattaforme, dovresti dare un'occhiata a cmake.


2
Clang non è un sostituto di GCC ... Solo un altro compilatore.
Isaac Pascual

4
@IsaacPascual Ciò che intendeva Mario è che clang ha ufficialmente nei suoi obiettivi di progettazione un sostituto immediato per il compilatore prominente sulla piattaforma su cui lo si esegue (ad esempio gcc se eseguito su Linux). Lo stesso vale per il compilatore di Intel afaik. È il loro modo per ottenere un'adozione più ampia.
Johan Boulé
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.