Cosa (se presente) è un buon modo per gestire l'incoerenza ABI tra libC++ e stdlibC++ su Mac?Qual è un buon modo per gestire le differenze ABI tra libC++ e libstdC++ precedente?
Il problema: molte funzionalità di C++ 11 richiedono la nuova implementazione libC++ della libreria standard C++. Ma libC++ non è compatibile con ABI con il vecchio libstdC++, mentre attualmente la maggior parte del software in genere si collega a quest'ultimo. Ad esempio il compilatore di sistema usa ancora stdlibC++, il che significa che tutte le mie librerie installate con macports hanno un ABI diverso per le classi std come la stringa e non sono collegabili con progetti che fanno un uso pesante di C++ 11.
Il mio attuale hack-of-a-solution: mantieni due versioni di librerie in cui questo normalmente porta a un problema (boost, opencv ecc.) E link a quello appropriato.
Immagino che se volessi veramente usare libC++ dovrei eliminare il mio sistema da qualsiasi cosa usando stdlibC++ e fare in modo che qualsiasi cosa da macports (o da qualsiasi altra parte) si colleghi solo con libC++. Potresti vedere quanto scoraggiante possa sembrare questo compito.
Qualcuno ha elaborato un buon modo per relazionarsi a questo "tra-stdlib-limbo" in cui viviamo? :)
EDIT: Sto facendo una domanda di follow-up implicita più esplicita: Apple spedisce sia libC++ che libstdC++ con i loro sistemi. Supponendo che si attacchi il problema sottostante e si provi a passare a libC++ - only. Quale sarebbe il modo consigliato di passare da libstdC++ a libC++ dato che il 100% delle librerie attualmente installate sul sistema (alcune fornite con il sistema, la maggior parte tramite macports, alcune tramite compilazione manuale) sono collegate a libstdC++ (se c'è)? Qualcuno ha fatto questo ed è sopravvissuto?
Tutto il codice collegati tra loro dovrebbe utilizzare la stessa implementazione libreria standard e la versione. Tutto il resto è chiamato incompatibile e non è mai stato progettato per funzionare. – PlasmaHH
Sì fuori rotta. Questo è l'intero problema - che abbiamo simultaneamente due implementazioni di libreria standard incompatibili in circolazione. La mia domanda riguarda le strategie che le persone hanno adottato per affrontare questo problema. – kamjagin
Questa è la strategia. Ci sono molte altre implementazioni di libreria standard, e sono incompatibili tra loro, e rimarranno così per sempre. – PlasmaHH