Linkertoolfehler LNK2019 - Wie beheben?

  • C++

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Goldwing Studios.

    Linkertoolfehler LNK2019 - Wie beheben?

    Hi,


    ich bin gerade dabei in C++ meine erste Open-GL unterstütze grafik-umgebung zu basteln, allerdings bleibe ich bei dem oben genannten Linkertoolfehler hängen und weiß auch nicht wie ich das lösen soll.

    Hier die Seite aus MSDN die ich aber null verstehe:

    msdn.microsoft.com/de-de/library/799kze2z(v=VS.80).aspx

    und hier noch die Scriptzeilen die mir so kopfzerbrechen bereiten:



    Hier ist die Definition der Funktion:

    VB.NET-Quellcode

    1. void OpenGL_Draw_Scene()
    2. {
    3. glBegin( GL_TRIANGLES );
    4. glColor3f( 1.0f, 1.0f, 1.0f );
    5. glVertex3f( 0.0f, 1.0f, -10.0f );
    6. glVertex3f( -1.0f, 0.0f, -10.0f );
    7. glVertex3f( 1.0f, 0.0f, -10.0f );
    8. glEnd();
    9. }


    und wird dann so in der Main aufgerufen:

    VB.NET-Quellcode

    1. OpenGL_start.OpenGL_Draw_Scene();


    da ja keine Parameter übergeben werden bleibt die Klammer leer.

    Soweit ist mir alles klar, auch die IDE unterkringelt mir nichts, ich warte auf eure Antworten.

    Danke schonmal!
    Linker-Fehler = du musst irgendwas einbinden oder definieren. Ergo: du hast hier Funktionen deklariert in einer Header-Datei (eben die OpenGL-Header), aber nirgendswo definiert.

    Dass heißt, du musst noch die OpenGL-Libraries einbinden. Irgendwo wird es dazu eine Anleitung geben. Die Header alleine reichen leider nicht ;-)
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    so, die Lib's hatte ich schon in einer seperaten Header-Datei deklariert:

    stdafx.h:

    VB.NET-Quellcode

    1. //================ STDAFX_H ===============//
    2. //================ INCLUDES ===============//
    3. #include <Windows.h>
    4. #include <gl/glu.h>
    5. #include <gl/gl.h>
    6. //================ PRAGMAS ================//
    7. #pragma comment( lib, "opengl.lib" )
    8. #pragma comment( lib, "glu.lib" )
    9. #pragma comment( lib, "glut32.lib" )



    opengl_init_cpp.cpp:

    VB.NET-Quellcode

    1. void OpenGL_Draw_Scene()
    2. {
    3. glBegin( GL_TRIANGLES );
    4. glColor3f( 1.0f, 1.0f, 1.0f );
    5. glVertex3f( 0.0f, 1.0f, -10.0f );
    6. glVertex3f( -1.0f, 0.0f, -10.0f );
    7. glVertex3f( 1.0f, 0.0f, -10.0f );
    8. glEnd();
    9. }


    opengl_init.h:

    VB.NET-Quellcode

    1. class OpenGL_Init
    2. {
    3. public:
    4. void OpenGL_Draw_Scene();


    und dann noch in der Main der aufruf:

    VB.NET-Quellcode

    1. OpenGL_start.OpenGL_Draw_Scene();


    die Header-Dateien sind in der Main sowie in der opengl_init_cpp.cpp eingebunden, also kann ich mir nicht erklären was der Fehler ist, ich hab die Funktion definiert und deklariert.
    Lass die #pragma-Teile weg (die sowieso nicht Standardkonform sind) und benutze lieber die MSVC Projekteinstellungen für so etwas. Unter Linker -> Eingabe hast du die Möglichkeit, die Bibliotheken hinzuzufügen.

    Zeig mal den genauen Fehler. Entweder, die "stdafx.hpp" wird nie eingebunden, oder es liegt an etwas anderem (oder du hast nicht alle nötigen Libraries eingebunden).
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.

    Quellcode

    1. 1>main_cpp.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall OpenGL_Init::OpenGL_Draw_Scene(void)" (?OpenGL_Draw_Scene@OpenGL_Init@@QAEXXZ)" in Funktion "_WinMain@16".
    2. 1>C:\*\Tutorial 2.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
    Das Problem liegt also nicht an OpenGL selber, sondern an deiner Klasse...
    Du deklarierst die Methode void OpenGL_Draw_Scene() in der Klasse OpenGL_Init. In der .cpp-Datei opengl_init_cpp.cpp (warum auch immer du ein _cpp am Ende hast...) definierst du aber eine globable Funktion void OpenGL_Draw_Scene().

    Lösung: Ersetze

    Quellcode

    1. void OpenGL_Draw_Scene()
    mit

    Quellcode

    1. void OpenGL_Init::OpenGL_Draw_Scene()
    damit der Compiler weiß, wo er die Funktion zuordnen muss.

    Glaub mir, lerne lieber erst einmal ein bisschen C++, bevor du dich an OGL ran wagst.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.