VC 2010 Pch Linkerfehler

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

VC 2010 Pch Linkerfehler

Beitrag von Jonathan »

Ich bin von VC 2008 auf VC 2010 Express umgestiegen. Das Projekt konnte auch importiert werden und es geht auch schon fast alles bis auf eins: Wenn ich PCH verwenden will, bekomme ich einen Interessanten Fehler:
Warnung 13 warning C4727: Ein vorkompilierter Header mit dem Namen "c:\eigene dateien\visual studio 2010\projects\apocalyptical age\workspaces\vc\game\release\game.pch" und dem gleichen Timestamp wurde in "C:\Eigene Dateien\Visual Studio 2010\Projects\Apocalyptical Age\Workspaces\VC\Game\Release\Collision.obj" und in "C:\Eigene Dateien\Visual Studio 2010\Projects\Apocalyptical Age\Workspaces\VC\Game\Release\AntTweakBar.obj" gefunden. Der zuerst gefundene wird verwendet. C:\Eigene Dateien\Visual Studio 2010\Projects\Apocalyptical Age\Workspaces\VC\Game\LINK

Fehler 14 error LNK2005: ___@@_PchSym_@00@UvrtvmvLwzgvrvmUerhfzoLhgfwrlLCABAUkilqvxghUzklxzobkgrxzoLztvUdliphkzxvhUexUtznvUivovzhvUervduifhgfnOlyq@ ist bereits in AntTweakBar.obj definiert. C:\Eigene Dateien\Visual Studio 2010\Projects\Apocalyptical Age\Workspaces\VC\Game\Collision.obj
Dieses Warnung/Fehler Pärchen bekomme ich einmal pro Quellcodedatei.
Ist vermutlich irgendeine Einstellungssache, aber so richtig viel hab ich eigentlich nicht gemacht. Ich hab einfach in den Projekteingenschaften unter "Vorkompilierte Header" "Erstellen (/Yc)" ausgewählt, und die entsprechende Datei angegeben. Wenn ich das ausschalte, funktioniert zwar alles, aber er kompiliert extrem langsam, da er ja für jede Datei die komplette Pch.hpp parsen muss.

Ist vermutlich ein simples Problem, aber irgendwie find ich keine Lösung.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Aramis »

Du hast einen kompletten Rebuild gemacht und auch mal alle OBJs in der Verzeichnisstruktur manuell geloescht, oder?
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Jonathan »

Jep.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Aramis »

Ich hab einfach in den Projekteingenschaften unter "Vorkompilierte Header" "Erstellen (/Yc)" ausgewählt, und die entsprechende Datei angegeben
Moment - 'Erstellen' brauchst du nur fuer eine CPP (meist eine leerer Dummy der gleich benannt ist wie der von allen inkludierte Header). Bei allen anderen CPPs muss es 'Verwenden' heissen.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Jonathan »

Ich kann die PCH Einstellungen nur Projektweit vornehmen, jedenfalls findet man bei den Eigenschaften einer Datei nix dazu. Und wenn ich nur auf verwenden gehe, kommen Fehler wie:
..\..\..\Game\Tile.cpp(1): fatal error C1083: Datei (vorkompilierte Headerdatei) kann nicht geöffnet werden: "Release\Game.pch": No such file or directory
(Ich denke, das verwenden statt erstellen ist eher dafür gedacht, die selbe PCH für mehrere Projekte zu benutzen).
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Jonathan »

Ich hab nochmal versucht, ein minimales Beispiel zu machen. Hier mal meine Vorgehensweise:

- Ich erstelle eine Headerdatei, nenne die Pch.hpp und inkludiere ein paar Standardheader.
- Ich habe eine Main.cpp, eine Functions.hpp und eine Functions.cpp. In der Functions.hpp stehen die üblichen Deklarationen, in der .cpp die Definition, die main.cpp inkludiert die Funcitons.hpp und benutzt die Funktion darin. Also alles ganz normal.
- Jede Source Datei inkludiert in der ersten Zeile die Pch.hpp, in den Projektoptionen stell ich unter Konfigurationseigenschaften/C/C++/Vorkompilierte Header /Yc ein und gebe Pch.hpp als Namen an.

Jetzt bekomme ich genau die selben Probleme. Wenn ich nur "verwenden" aktiviere, findet er sie nicht, wenn ich erstellen aktiviere, kommt bei der zweiten Datei ein Linkerfehler, wegen doppelt definierter Symbole.
In der Hilfe zu VC2010 sind zu Pch's nur Beispiel Makefiles, aber die will ich eigentlich nicht benutzen.

Ich meine, irgendjemand muss hier doch schonmal PCH's mit VC2010 benutzt haben und mir sagen können, ob ich irgendwas grundlegend falsch mache, oder ob es einfach nur komisch ist, dass ich so Fehler bekomme.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Schrompf »

Die grundlegende Vorgehensweise ist recht einfach:

a) Stelle bei einer CPP-Datei das "PCH erstellen" ein
b) Stelle bei allen anderen CPP-Dateien das "PCH verwenden" ein.
c) Stelle bei allen Dateien den PCH-Header auf den Header Deiner Wahl.
d) Stelle sicher, dass jede PCH-betroffene CPP-Datei als erstes #include diesen Header liest. Danach dürfen aber weitere Header kommen.

Visual Studio kompiliert dann automatisch die "PCH erstellen"-Datei zuerst und alle anderen Dateien danach gehen rasend schnell.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Jonathan
Establishment
Beiträge: 2395
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: VC 2010 Pch Linkerfehler

Beitrag von Jonathan »

Jo, danke jetzt gehts.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Antworten