(Dateien nach einer bestimmten Reihenfolge kompilieren) Linker-Fehler



  • Bau mal Codeguards in deine Header.

    Header am Ende nicht gut, hat man schon geschrieben 😕

    MfG f.-th.



  • Vielen Dank! es klappt wieder! 😉



  • Hatte das falsche Stichwort 😡

    Das war gemeint:
    http://de.wikibooks.org/wiki/C-Programmierung:_Eigene_Header

    MfG f.-th.



  • f.-th. schrieb:

    Bau mal Codeguards in deine Header.

    Die Tuer schrieb:

    #pragma once

    Er braucht also keine (sofern er den Code nicht durch Compiler, die diese Direktive nicht unterstützen, jagen möchte).



  • Wenn ich jetzt aber in ein anderes Projekt das Engine-Projekt hinzufüge, kommen Linker-Fehler (Verweis auf nicht aufgelöstes externes Symbol ""enum ieResult __cdecl InitWindow(int,int,char *,struct HICON__ *,struct HINSTANCE__ *)" (?InitWindow@@YA?AW4ieResult@@HHPADPAUHICON__@@PAUHINSTANCE__@@@Z)" in Funktion "_WinMain@16 ...)

    IEngine.h

    ...
    #include"ieInitWindow.h"
    

    ieInitWindow.h

    #pragma once
    #include "IEngine.h"
    
    //Funktionen
    LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    ieResult InitWindow(int iWidth, int iHeight, char* cName, HICON hIcon, HINSTANCE hInst);
    

    ieInitWindow.cpp

    #include "ieInitWindow.h"
    ieResult InitWindow(int iWidth, int iHeight, char *cName, HICON hIcon, HINSTANCE hInst)
    {
    	[Definition der Funktion]
    }
    

    Test-Projekt
    Test.cpp

    #include "..\\..\\Engine\\Engine\\IEngine.h"
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int ncmdshow)
    {
    	InitWindow(10, 10, "Name", NULL, hInst);
    	...
    
    }
    


  • Kann mir denn wirklich keiner helfen? 😞



  • Hast du denn deinem Projekt die "Engine.lib" hinzugefügt (ich nehme mal an, du hast eine statische bzw. dynamische Library erstellt)?

    Wenn nicht, dann mußt du auch noch die Engine-Sourcen deinem Projekt hinzufügen...

    P.S: "..\..\\Engine\\Engine\\IEngine.h" solltest du nicht verwenden, sondern in deinem Projekt den Pfad auf die Header-Dateien mitgeben (damit du nur noch "Engine\\IEngine.h" [bzw. noch besser "Engine/IEngine.h"] schreiben mußt).



  • Ich habe keine library erstellt 🙄 Wozu ist das denn nötig und wie mache ich das?
    (ich hab noch nie Libraries erstellt)



  • Was für einen Projekttyp hast du denn bei deinem Engine-Projekt eingestellt?

    Bzgl. Library, s. http://de.wikipedia.org/wiki/Programmbibliothek



  • Als Projekttyp habe ich Win32-Projekt eingestellt.



  • Hallo Florian,

    ich nehme mal an, daß du das Engine-Projekt nicht als eigenständige Anwendung laufen lassen möchtest? Dann wähle unter "Allgemein"/"Konfigurationstyp" bei den Projektoptionen "statische Bibliothek" (oder alternativ "dynamische Bobliothek", falls du eine DLL erstellen willst) aus.

    Nun kannst du bei deinem anderen Projekt diese als Library eintragen (unter "Linker"/"Eingabe"/"Zusätzliche Abhängigkeiten"): Engine.lib
    Du mußt dann noch den Suchpfad dazu eintragen: "Linker"/"Allgemein"/"Zusätzliche Bibliotheksverzeichnisse".

    Eine andere Alternative besteht darin, in einer "Solution" beide Projekte zu verwalten und eine Referenz (Verweis) auf das Engine-Projekt in dem anderen Projekt hinzuzufügen.

    P.S. evtl. solltest du deine vorherigen Beiträge mal editieren, damit man deinen Namen nicht mehr sieht...



  • Danke für die Antwort und den Tipp 😉 (habe ganz vergessen meinen Namen herauszukürzen 🙄 )


Anmelden zum Antworten