Frage

Ich versuche zu kompilieren die Punkt Cloud Library (PCL) aus Quellen in Visual Studio 2013 (mit V120 Toolset und MSCl18 natürlich), da ich diese Bibliothek für ein VS2013-Projekt brauche. Es stellte sich jedoch eine knifflige Aufgabe heraus.

  • Einfach sind PCL-Quellen nicht in VS2013 kompiliert, weil sie brechen Änderungen in neuen C ++ - Standardvorlagen in VS2013
  • Auf der anderen Seite, wenn in VS2012 kompiliert, haben PCL-DLLs eigene CRT und sogar einfachste PCL-Code-Code-Abstürze

Beispielsweise in VS2013 Dieser Code-Snippet:

generasacodicetagpre.

wirft eine Ausnahme bei "EntercricitySection (& ((((((((((_ filex *) pF) -> sperren);", die in Diese Frage , aufgrund unterschiedlicher CRTs in PCL-DLLs und meinem EXE.

Als letzter Ausweg versuche ich, C ++-Frontend von MSCl18 bis MSCl17 zu ändern, um Objekt- oder Assembler-Dateien zu erhalten, und verknüpfen Sie sie mit dem CL18-Linker auf dem weiteren Bauschritt. Ich habe keinen guten Weg gefunden, es noch nicht zu tun.

So ist meine Frage, ob jemand ihre Erfahrung in einer solchen zweistufigen Zusammenstellung teilen kann, wie er das vorherige Compiler-Versions-Frontend ersetzt oder was in diesem Problem eine andere Lösung sein kann?

War es hilfreich?

Lösung

Ich habe ein paar Ansätze ausprobiert, um diese 3RD-Partei-Bibliothek zusammenzustellen, ohne den Bibliotheksquellcode zu ändern. Derjenige, der sich als ok herausstellte, war ersetzt VS2013 C ++-Front-End (Werkzeugset V120, MSCl18) mit dem vorherigen (VS2012, Toolset V110, MSCl17) für einige Dateien, die nicht durch VS2013 und anschließend verwenden resultierende obj-Dateien in der weiteren Kompilierung in VS2013.

Die Bemerkungen von James McNellis haben einen tollen Job gemacht, als er mir geholfen hat, Compilation-Fehler in VS2013 STL-STL-Stream- und String-Objekten besser zu verstehen und mit meiner Teilmenge von VS2013 STL herauszufinden, die mit einem nativen Werkzeugsatz von VS2012 zusammengestellt wurde.

Eigentlich habe ich ein benutzerdefiniertes Build-Tool (C ++ - Projekt -> Eigenschaften) für verschiedene Konfiguration und Plattformen erstellt:

generasacodicetagpre.

mit den folgenden Ausgängen:

generasacodicetagpre.

Ich habe das Tool für nicht kompilierbare Dateien in dieses benutzerdefinierte Build-Tool geändert (C ++ - Datei -> Eigenschaften -> Allgemein -> Artikeltyp -> Benutzerdefiniertes Build-Tool) und es ging hübsch mit dem gesamten Compilation-Prozess zusammen. Die Binärdarstellung von String Object Sah identisch aus, die resultierenden binären DLLs funktionierten kein Problem, und das gesamte System hat alle unsere QA-Tests bestanden. Dieser kleine Hack half uns, das gesamte System an VS2013 zu verschieben, das sich aufgrund einiger Dateien in einer Bibliothek verzögert hatte, von denen wir abhängig waren.

30. März 30 Aktualisierung: Wir haben bei diesem Ansatz keinen Fehler für einige Monate auf mehreren Entwicklungs- dev- und testboxen gefunden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top