PCH-Problem mit VS2008 Express



  • Moin.
    Ich verwende immer vorkompilierte Header in VC++. Das ging bei dem Projekt immer gut. Seit kurzem allerdings hab ich ein derbes Problem, das Projekt lässt sich nicht mehr linken.
    FM: __PCHsym_[viele zahlen] already defined in xxx.obj
    Die erscheint für jede Objekt-Datei die angelegt wird. Das heisst mWn, dass ein Symbol mehrfach vorhanden ist. NUr welches? Anhand des Namens ist das auf keinen Fall zu identifizieren leider. Ich habe bereits alle Header soweit durchgesehen, die von mir sind, aber nichts gefunden, was das irgendwie verursachen könnte. Ich habe zwar eine hpp-Datei mit globalen Werten ( Tastendefinitionen ) aber wenn ich diese ausgliedere, dann besteht das Problem weiterhin.
    ICh bin mit meinem Latein soweit am Ende. Vielleicht hat ja hier jemand noch eine Idee. Das komische ist halt, dass das quasi von einer kompilierung zur anderen kam. Stelle ich die PCH ab, kompiliert das Projekt ohne Warnung und Fehlermeldung.
    rya.



  • Lösch doch mal die pch-Datei...



  • Hehe, das hab ich schon. Hab den ganzen Ordner mit dem Output gelöscht. Hilft leider nix.
    rya.



  • Verwendest du ein Versionierungstool? Da solltest du mal ein Diff o.ä. drüber laufen lassen, damit du die Unterschiede sehen kannst.
    Eine andere Möglichkeit wäre die PCH-Funktion temporär abzuschalten, und zu sehen, ob er immer noch nicht linken kann. (stdafx.h kann man weiterhin inkludiert lassen!)



  • Bulli schrieb:

    Verwendest du ein Versionierungstool? Da solltest du mal ein Diff o.ä. drüber laufen lassen, damit du die Unterschiede sehen kannst.
    Eine andere Möglichkeit wäre die PCH-Funktion temporär abzuschalten, und zu sehen, ob er immer noch nicht linken kann. (stdafx.h kann man weiterhin inkludiert lassen!)

    Wie oben bereits geschrieben: Ohne PCH kompilierts anstandslos, nur dauerts halt lange. Versionierung habe ich bei dem Projekt leider keine, da es mehr eine "case study" ist und (noch) kein ernsthaftes Projekt (da ich derzeit andere Projekte habe die wichtiger sind).
    rya.



  • Sorry für Doppelpost, aber hier mehr Daten für euch.. vielleicht hilfts ja und sorry für Wall of Text.. 😞

    Kompilieren...
    DllMain.cpp
    NLTexture.cpp
    NLLogProvider.cpp
    NLLog.cpp
    NLVideoDriver.cpp
    NLGameWindow.cpp
    NightLight.cpp
    Verknüpfen...
    NightLight.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    NLGameWindow.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    NLVideoDriver.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    NLLog.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    NLLogProvider.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    NLTexture.obj : error LNK2005: ___@@_PchSym_@00@UkilqvxghUmrtsgortsgUlyqUmrtsgortsgUwvyftUwoonzrmOlyq@ ist bereits in DllMain.obj definiert.
    Bibliothek "X:\Projects\Nightlight\\lib\Nightlight_d.lib" und Objekt "X:\Projects\Nightlight\\lib\Nightlight_d.exp" werden erstellt.
    X:\Projects\Nightlight\\bin\msw\Nightlight_d.dll : fatal error LNK1169: Mindestens ein mehrfach definiertes Symbol gefunden.

    Der Header der in den Projektsettings angegeben ist:

    #ifndef NIGHTLIGHT_HPP_INCLUDED
    #define NIGHTLIGHT_HPP_INCLUDED
    
    #if defined(_WIN32)
    #   define NL_PLATFORM_WIN32
    #elif defined (_linux)
    #   define NL_PLATFORM_LINUX
    #endif /* PLATFORM */
    
    //---------------------------------------------------
    // Includes
    //---------------------------------------------------
    #include <string>
    #include <fstream>
    #include <sstream>
    #include <ctime>
    
    //---------------------------------------------------
    // Eigen Math-Library
    //---------------------------------------------------
    #include <Eigen/Core>
    #include <Eigen/Geometry>
    
    //---------------------------------------------------
    // Boost
    //---------------------------------------------------
    #include <boost/utility.hpp>
    
    //---------------------------------------------------
    // libsigc++
    //---------------------------------------------------
    #include <sigc++/sigc++.h>
    
    //---------------------------------------------------
    // OpenGL
    //---------------------------------------------------
    #include <GL/GLee.h>
    #include <GL/GL.h>
    #include <GL/glu.h>
    
    //---------------------------------------------------
    // Export-Macro
    //---------------------------------------------------
    #if defined(NIGHTLIGHT_EXPORTS) && defined(NL_PLATFORM_WIN32)
    #   define NLEXPORT _declspec(dllexport)
    #elif defined(NL_PLATFORM_WIN32)
    #   define NLEXPORT _declspec(dllimport)
    #else
    #   define NLEXPORT
    #endif
    
    //---------------------------------------------------
    // Namespace
    //---------------------------------------------------
    #define NIGHTLIGHT_NAMESPACE namespace NightLight{
    #define NIGHTLIGHT_NAMESPACE_END }
    
    NIGHTLIGHT_NAMESPACE
    
    //---------------------------------------------------
    // Types
    //---------------------------------------------------
    typedef unsigned int  u32;
    typedef unsigned char  u8;
    typedef signed   int  s32;
    typedef signed   char  s8;
    typedef float         f32;
    typedef unsigned long uLong;
    typedef std::string   NLString;
    
    NIGHTLIGHT_NAMESPACE_END
    
    //---------------------------------------------------
    // NightLight-Core ( what everyone needs )
    //---------------------------------------------------
    #include "NLObject.hpp"
    #include "NLLog.hpp"
    
    #ifndef NIGHTLIGHT_EXPORTS
    #   include "NLVector2.hpp"
    #   include "NLVector3.hpp"
    #   include "NLVector4.hpp"
    #   include "NLGameWindow.hpp"
    #   include "NLVideoDriver.hpp"
    #endif /* NIGHTLIGHT_EXPORTS */
    
    NIGHTLIGHT_NAMESPACE
    
    /// \brief Returns a pointer to the systems logbook.
    extern NLEXPORT NLLog* NLGetSysLog();
    
    NIGHTLIGHT_NAMESPACE_END
    
    #endif /* NIGHTLIGHT_HPP_INCLUDED */
    


  • Hast Du vielleicht bei *mehreren* cpp-Datein das pch aktiviert???



  • Jochen Kalmbach schrieb:

    Hast Du vielleicht bei *mehreren* cpp-Datein das pch aktiviert???

    Jup, ich Idiot hab die PCH global aktiviert anstatt nur für eine Datei. Hat wohl ne zeitlang funktioniert und jetzt hats halt "geknallt"...
    Danke Jochen :).
    rya.


Log in to reply