Ich habe ein Problem beim Verknüpfen eines C ++ - Projekts in VS2008, wenn die Option /clr
compile verwendet wird. Ich erhalte folgende Build-Fehler:
Ich habe keine Ahnung, worauf sich PROPSHEETPAGEA
und PROPSHEETPAGEW
beziehen. Ich habe online nachgesehen, um Microsofts Beschreibung des Fehlers zu sehen, aber ich weiß nicht, was es bedeutet.
Ссылка
Fügen Sie eindeutige IDs hinzu, wenn Sie verwaltete Erweiterungen für C ++ verwenden, um dieses Problem zu beheben, damit Sie anonyme Strukturen als globale Variablen vermeiden.
Microsoft hat bestätigt, dass es sich hierbei um einen Fehler in den Microsoft-Produkten handelt, die zu Beginn dieses Artikels aufgeführt sind. Dieser Fehler wurde in Microsoft Visual C ++ .NET (2003) behoben.
Irgendwelche Ideen würden sehr geschätzt werden.
BEARBEITEN
Nachdem ich eine Klasse auf Class1.obj gemacht habe, habe ich zwei Nachrichten extrahiert:
%Vor%Ich bin mir nicht sicher, was das alles bedeutet, aber es sieht so aus, als wäre der zweite Eintrag identisch mit dem ersten, außer dass die Attribute rückwärts definiert sind.
Ich hatte genau dieses Problem heute bei einem meiner Projekte. Ich habe es gelöst, indem ich meine Header-Dateien umgeordnet habe. Problem war, dass ich eine Header-Datei an den Anfang der cpp-Datei verschoben hatte, vor der Datei, die windows.h enthielt. Sobald ich also die Include-Reihenfolge rückgängig gemacht und windows.h wieder an den Anfang der cpp-Datei gesetzt habe, wurde alles repariert.
sehr seltsam fix, aber es hat für mich funktioniert.
Ich habe dieses Problem einfach gelöst, indem ich die gesamte Lösung sauber gemacht habe. Scheint, dass dies passieren kann, wenn VS Dinge durcheinander bringt.
Ich hatte heute das selbe Problem, indem ich mein Projekt von vs2008 nach vs2010 migrierte. Beim Kompilieren eines CLI-Projekts, das mit anderen C ++ - Bibliotheken verknüpft ist, habe ich diesen Linkfehler auf:
%Vor%Ich habe ildasm wie die Dokumentation vorgeschlagen, aber konnte keine Typdefinitionen finden, die gleich aussehen, aber einen anderen Namen haben.
Außerdem muss ich sagen, dass ich diesen Fehler nicht vollständig verstehe. Die Tatsache, dass zwei Fehler auftreten, bedeutet, dass es zwei verschiedene Probleme mit beiden Typen gibt (Zeichenkette und Zeichenkette wchar) oder bedeutet es, dass es ein Problem gibt, das diese beiden Typen verursachen. Was ist die Bedeutung der Zahlen am Ende der Zeile (ich habe jedoch zwei Typdefinitionen im ildasm-Protokoll mit diesen Zahlen gefunden). Da ist nichts in der Dokumentation.
BTW - gleiche Projekte - die gleiche Konfiguration kompiliert und verbindet sich perfekt mit vs2008.
Wie auch immer, im Dunkeln verloren, habe ich meine andere C ++ - Bibliothek, die mit dem CLI-Projekt verknüpft ist, in ein CLI-Projekt umgewandelt (kompiliert es mit dem / clr-Flag). Das CLI-Projekt neu zu verlinken scheint das Problem zu lösen. Irgendwie führt das Hinzufügen der clr-Unterstützung oder das Verknüpfen mit clr zu einer Kollision dieses Typs.
Wenn jemand eine fundierte Erklärung zu diesem Thema hat, würde ich es gerne lesen.
Ich hatte das gleiche Problem, aber später stellte ich fest, dass die Klasse, die im Fehler angezeigt wurde, zweimal enthalten war. Ich hatte meine Hauptklassen-Header-Datei zu Sicherungszwecken in meinem Projektverzeichnis gespeichert, und das Original befand sich im Include-Ordner meines Projekts. Es ist passiert, weil ich diese beiden Verzeichnispfade in die Eigenschaft "Include Addition File Path" meines Projekts eingefügt hatte.
Dieser Fehler tritt nur in der Debug-Version auf, es ist eine Art Compilerfehler. Um es zu beheben, können Sie die Projekteinstellung wechseln
%Vor%von
%Vor% bis MultiThreaded Dll (MD)
(für DLL). Aber dann haben Sie Probleme mit dem Debuggen dieses Codes (z. B. mit Haltepunkten)
Eine andere Möglichkeit ist, STL-Klassen im gemischten Code loszuwerden: komplett im Projekt oder teilweise: Teile dein Projekt in reine native (mit STL-Klassen) und gemischte Teile, erstelle verschiedene vorkompilierte Header für sie, schalte ab / clr für das gesamte Projekt und nur für cpps mit gemischtem Code einschalten.
In meinem Fall war eine Klassendeklaration abhängig von einer #define
, die in einer .h (testing #ifdef
) deklariert wurde, die ich vergessen habe, sie in eine der Dateien aufzunehmen, die sie benutzen. Im Ergebnis hatte Linker 2 verschiedene Beschreibungen der Klasse.
Überprüfen Sie in dieser Situation alle Dateien, die die zugehörige Datei enthalten, mit bedingter Deklaration.
Ich hatte dieses Problem in letzter Zeit auch. Es scheint, dass, bevor ich ein Arbeitsformular machte, ich ein anderes Formular gemacht hatte, aber es gelöscht hatte. Aber irgendwie ist eine seiner .cpp-Datei geblieben. Bis ich es bemerkte, hatte ich diesen Fehler. Nachdem ich die .cpp-Datei des gelöschten Formulars entfernt hatte, ging das Prblem verloren.
Tags und Links c++ visual-studio-2008 linker clr managed-c++