Ich verwende MSVC++ 6, um ein sehr großes Projekt zu erstellen. Einige der Quelldateien in diesem Projekt werden für ein kleines Dienstprogramm freigegeben, das wir für die Verwaltung der Anwendung verwenden. Zuvor musste dieses kleine Dienstprogramm mit vielen Bibliotheken aus der Hauptanwendung verknüpft werden und benötigte zur Laufzeit die DLLs der Hauptanwendung. Ich wurde damit beauftragt, diese Abhängigkeiten zu entfernen, was sich ziemlich einfach anhört ... Leider bereiten die vorkompilierten Header, die in der Haupt-App verwendet werden, mir eine Menge Ärger.Umstrukturierungsabhängigkeiten einiger Dateien in einem Projekt mit vorkompilierten Headern verursacht Linkfehler
Ich habe zuerst alle Dateien im Dienstprogramm überarbeitet, um explizit alles einzubeziehen, was sie brauchen, und dann entfernte ich die # include-Direktiven für den PCH (dadurch wurden 95% der unnötigen Abhängigkeiten für das Dienstprogramm entfernt). Dies funktioniert hervorragend zum Kompilieren des Dienstprogramms. Jetzt jedoch gibt mir das Kompilieren der Haupt-App Fehler bezüglich fehlender vorkompilierter Header-Direktiven. Ich dachte "großartig, ich werde den PCH nur bedingt einbeziehen". Dies scheint nicht zu funktionieren ... Ich bekomme "unerwartete #endif", wie erwähnt here. Mein nächster Gedanke war, PCH in der Haupt-App für die drei Quelldateien zu deaktivieren, die zwischen dem Dienstprogramm und der Haupt-App geteilt werden. Dies kompiliert erfolgreich, aber ich ein paar Fehler erhalten, die während der Verknüpfung wie folgt aussehen:
tls7d.lib(tls707d.dll) : error LNK2005: "public: unsigned int __thiscall RWCString::length(void)const " ([email protected]@@QBEIXZ) already defined in stripledescypher.obj
AFAICT
, alle der mehrfach definierten Symbole sind diejenigen, die ich explizit in den freigegebenen Dateien gehören die Notwendigkeit, dass die PCH zu vermeiden . Meine Vermutung ist, dass, da ich diese drei Dateien in die gleiche DLL wie die PCH .cpp-Datei verknüpfe, sie an mehreren Stellen kompiliert werden. Gibt es einen Ausweg aus dieser Unordnung? Ich werde fast alles versuchen ...