Ich möchte mein aktuelles Projekt nach C++ 11 verschieben. Der Code kompiliert alles mit clang ++ -std = C++ 0x. Das ist der einfache Teil :-). Der schwierige Teil beschäftigt sich mit externen Bibliotheken. Man kann sich nicht darauf verlassen, dass man seine C++ 11-Objekte mit externen Bibliotheken verknüpft, die nicht mit C++ 11 kompiliert wurden (siehe http://gcc.gnu.org/wiki/Cxx11AbiCompatibility). Boost zum Beispiel muss sicherlich neu aufgebaut werden (Why can't clang with libc++ in c++0x mode link this boost::program_options example?). Ich habe eine Quelle für alle externen Bibliotheken, die ich benutze, so kann ich (mit etwas Mühe) diese Bibliotheken theoretisch mit C++ 11 neu aufbauen. Das bringt jedoch noch einige Probleme mit sich:Verwalten von externen Bibliotheken (z. B. Boost) während des Übergangs zu C++ 11
Entwicklung in einer gemischten C++ 03/C++ 11-Umgebung: Ich habe einige alte Projekte mit C++ 03, die gelegentliche Wartung erfordern. Natürlich möchte ich diese mit bestehenden Versionen externer Bibliotheken verknüpfen. Aber für meine aktuellen (und neuen) Projekte möchte ich mich mit meinen neu gebauten C++ 11-Versionen der Bibliotheken verbinden. Wie organisiere ich meine Entwicklungsumgebungen (derzeit Ubuntu 12.04 und Mac OS X 10.7), um damit umzugehen?
Ich gehe davon aus, dass dieses Problem von vielen Entwicklern konfrontiert werden wird. Es wird nicht weggehen, aber ich habe keine empfohlene und allgemein anerkannte Lösung gefunden.
Bereitstellung: Derzeit bin ich auf Ubuntu 12.04 LTS-Server in der Cloud bereitstellen. Erfahrung führt dazu, dass man (wenn möglich) von den Standard-Paketen (z. B. libboost) abhängt, die mit der Linux-Distribution verfügbar sind. Wenn ich mein aktuelles Projekt nach C++ 11 verschiebe, muss ich, glaube ich, meine eigenen Versionen der externen Bibliotheken erstellen. Meine Vermutung ist, dass sich das irgendwann ändern wird, und sie werden "Standard" -Versionen von Bibliothekspaketen mit C++ 11-Kompatibilität sein. Hat jemand eine Idee, wann das zu erwarten ist? Und vermutlich wird dies auch eine Standardlösung für das oben erwähnte Problem erfordern - gleichzeitige Existenz von C++ 03-Bibliotheken und C++ 11-Bibliotheken auf derselben Plattform.
Ich hoffe, dass ich etwas Grundlegendes verpasst habe, so dass diese wahrgenommenen Probleme in einem Hauch von entsprechender Information verschwinden! Versuche ich, zu früh zu C++ 11 zu wechseln?
Update (2013.09.11): Verwandte Diskussion für Macports: https://lists.macosforge.org/pipermail/macports-users/2013-September/033383.html
"Wie organisiere ich meine Entwicklungsumgebungen ... um damit fertig zu werden?" - Passen Sie Ihren Build-Mechanismus an, um verschiedene Bibliothekspfade zu durchlaufen. Für Clang und GCC ist "-L" dein Freund. – Xeo
@Zeo, ich kenne -L. Ich verstehe nicht, warum Clang einen anderen Bibliothekspfad zu GCC hat, um das Problem zu lösen. Vielleicht könnten Sie es ausarbeiten? Wenn ich meinen eigenen Prozess zum Marshalling verschiedener Builds von externen Standardbibliotheken in verschiedene Verzeichnisse erstellen muss (wahrscheinlich eines für C++ 11, eines für C++ 03 und eines für Bibliotheken, die mit beiden funktionieren), dann I Ich bin an einem Ort, den ich lieber meiden würde, und einen, den ich mit zig Millionen Entwicklern teilen würde, die das gleiche Rad (kleinere Variationen) erfinden. Wird es so sein? –
Also ...Sie kompilieren mit clang aber verwenden Sie die gcc ABI Dokumentation? :) –