Frage

Es scheint, dass mein ganzes Erwachsenenleben von dem VC ++ - Linker, der sich beschweren oder kündigte, gequält worden war, da verschiedene Bibliotheken nicht darauf einig sind, welche Version der Laufzeitbibliothek verwendet werden soll. Ich bin nie in der Stimmung, dieses düstere Thema zu beherrschen. Also versuche ich nur, damit zu spielen, bis es funktioniert. Die Fehlermeldungen sind niemals nützlich. Auch die Microsoft -Dokumentation zu diesem Thema ist auch nicht zumindest für mich.

Manchmal findet es keine Funktionen - weil der Namensmanging nicht das ist, was erwartet wurde? Manchmal weigert es sich, sich zu mischen. Andere Male heißt es nur, "Link: WARNUNG LNK4098: defaultLib 'libcmtd' Konflikte mit Verwendung anderer LIBs; Verwendung /nodeFaultLib: Bibliothek" Die Verwendung /NodeFaultLib funktioniert nicht, aber die Warnung scheint gutartig zu sein. Was zum Teufel ist überhaupt "defaultLib"? Wie entscheidet sich der Linker? Ich habe noch nie einen Weg gesehen, dem Linker, welche Laufzeitbibliothek zu verwenden ist.

Es gibt "Abhängigkeits -Walker" -Programme, mit denen Objektdateien inspiziert werden können, um zu sehen, worauf die DLLs abhängig sind. Ich habe gerade einen für ein Projekt gelaufen, das ich bauen versuche, und es ist ein echtes Chaos. Es gibt Systeme .Libs und .dlls, die widersprüchliche Laufzeitversionen wollen. Zum Beispiel will Comctl32.dll msvcrt.dll, aber ich verlinke mit msvcrtd.dll. Ich suche zu sehen, ob es einen comctl32d.dll gibt, auch wenn ich tippe.

Ich denke, was ich frage, ist ein Tutorial, wie ich diese Dinge aussortieren kann. Was machst du und wie machst du das?

Hier ist, was ich glaube, ich weiß. Bitte korrigieren Sie mich, wenn etwas davon falsch ist.

  1. Die Parameter sind Debug/Release, Multi-Threadede/Single-Threaded und Static/DLL. Nur sechs der acht möglichen Kombinationen sind abgedeckt. Es gibt keine Single-Thread-DLL, entweder Debugg oder Veröffentlichung.

  2. Die Einstellungen beeinflussen nur, in welcher Laufzeitbibliothek (und in der aufrufenden Konvention) verknüpft wird. Sie müssen beispielsweise weder eine DLL-basierte Laufzeit verwenden, wenn Sie eine DLL erstellen, noch müssen Sie eine Debug-Version der Laufzeit verwenden, wenn Sie die Debug-Version eines Programms erstellen, obwohl es bei Single zu helfen scheint. Verenden von Systemanrufen vorbeikommen.

Bonusfrage: Wie könnte jemand oder ein Unternehmen ein solches Chaos schaffen?

War es hilfreich?

Lösung

Dies scheint ein bisschen wie der Versuch, eine Antwort auf die falsche Frage zu finden, und / oder das Rad neu erfinden.PHP wird Ihre Überprüfung auf Sie überprüfen, wenn er einen tödlichen Fehler auswirft.

Wenn Sie es so ansehen möchten, funktioniert Ihr Code tatsächlich bereits.Sie erhalten einen schwerwiegenden Fehler, daher ist die übergeordnete Klasse nicht vorhanden, daher müssen Sie Ihren Code beheben.Nachdem Sie festgestellt haben, dass eine Elternklasse fehlt, was wirst du sonst noch tun?Sie müssen es immer noch reparieren.

Was ich versuche, ist, dass, wenn Sie den tödlichen Fehler loswerden, Sie nicht überallhin bringen - Ihr Code ist noch fehlerhaft und ärgert sich wahrscheinlich an irgendwo hinunter.Sicher, Sie könnten echo "Sie haben dem Benutzer ein Problem", aber das tut PHP bereits tut.

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