Desidero spostare il mio progetto corrente in C++ 11. Il codice viene compilato utilizzando clang ++ -std = C++ 0x. Questa è la parte facile :-). La parte difficile riguarda le librerie esterne. Non si può fare affidamento sul collegamento dei propri oggetti C++ 11 con librerie esterne che non sono state compilate con C++ 11 (vedere http://gcc.gnu.org/wiki/Cxx11AbiCompatibility). La spinta, per esempio, ha certamente bisogno di ricostruire (Why can't clang with libc++ in c++0x mode link this boost::program_options example?). Ho una fonte per tutte le librerie esterne che uso, quindi posso (con un po 'di dolore) ricostruire teoricamente queste librerie con C++ 11. Tuttavia, ciò mi lascia ancora alcuni problemi:Gestione di librerie esterne (ad es. Boost) durante la transizione a C++ 11
Sviluppo in un ambiente misto C++ 03/C++ 11: Ho alcuni vecchi progetti che utilizzano C++ 03 che richiedono una manutenzione occasionale. Ovviamente, voglio collegarli a versioni esistenti di librerie esterne. Ma per i miei progetti attuali (e nuovi), voglio collegarmi con le versioni ricostruite del C++ 11 delle librerie. Come posso organizzare i miei ambienti di sviluppo (attualmente Ubuntu 12.04 e Mac OS X 10.7) per far fronte a questo?
Suppongo che questo problema verrà affrontato da molti sviluppatori. Non andrà via, ma non ho trovato una soluzione raccomandata e generalmente approvata.
Distribuzione: Attualmente, distribuisco su server Ubuntu 12.04 LTS nel cloud. L'esperienza porta a dipendere (ove possibile) dai pacchetti standard (ad es. Libboost) disponibili con la distribuzione linux. Se sposto il mio attuale progetto in C++ 11, la mia comprensione è che dovrò costruire le mie versioni delle librerie esterne che uso. La mia ipotesi è che a un certo punto questo cambierà e saranno versioni "standard" di pacchetti di librerie con compatibilità C++ 11. Qualcuno ha qualche idea quando ci si potrebbe aspettare che accada? E presumibilmente ciò richiederà anche una soluzione standard al problema sopra menzionato - esistenza concomitante di lib di C++ 03 e librerie C++ 11 sulla stessa piattaforma.
Spero di essermi perso qualcosa di fondamentale in modo che questi problemi percepiti scompaiano in un soffio di informazioni appropriate! Sto cercando di passare a C++ 11 troppo presto?
Aggiornamento (2013/09/11): discussione correlati per macports: https://lists.macosforge.org/pipermail/macports-users/2013-September/033383.html
"Come organizzo i miei ambienti di sviluppo ... per far fronte a questo?" - regola il tuo meccanismo di costruzione per passare diversi percorsi di libreria; per Clang e GCC, '-L' è tuo amico. – Xeo
@Zeo, ho familiarità con -L. Non capisco perché fare in modo che Clang abbia un percorso di libreria diverso da GCC risolva il problema. Forse potresti elaborare? Se ho bisogno di creare il mio processo per il marshalling di diverse build di librerie esterne "standard" in diverse directory (probabilmente una per C++ 11, una per C++ 03 e una per libs che funziona con entrambi), quindi I Sono in un posto che preferirei evitare, e che vorrei condividere con milioni di sviluppatori che inventano (variazioni minori) la stessa ruota. È così che sarà? –
Quindi ...compili con clang ma usi la documentazione di gcc ABI? :) –