Question

I am having alot of trouble compiling any simple OpenGL application in c++. I have been looking around and have mostly seen that the problem is linking, but i haven't been able to find a solution that works for me. I have added MinGW to the Path and also moved the freeglut and glut libraries and headers over. I have used a simple openGL tutorial example and its supposed to draw a white line in a black box. Here is my code:

#include <gl/freeglut.h>

using namespace std;

void Draw(){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,1.0,1.0);
    glBegin(GL_LINES);
        glVertex3f(.25, .25, 0.0);
        glVertex3f(.75, .75, 0.0);
    glEnd();
    glFlush();
    }
void Initialize(){
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}
int main(int iArgc, char** cppArgv){
    glutInit(&iArgc, cppArgv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(200, 200);
    glutCreateWindow("XoaX.net");
    Initialize();
    glutDisplayFunc(Draw);
    glutMainLoop();
    return 0;
}

Here is my build log:

-------------- Build: Debug in OpenGL (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe  -o bin\Debug\OpenGL.exe obj\Debug\main.o   
obj\Debug\main.o: In function `glutInit_ATEXIT_HACK':
c:/mingw/include/gl/freeglut_std.h:614: undefined reference to `_imp____glutInitWithExit@12'
obj\Debug\main.o: In function `glutCreateWindow_ATEXIT_HACK':
c:/mingw/include/gl/freeglut_std.h:616: undefined reference to `_imp____glutCreateWindowWithExit@8'
obj\Debug\main.o: In function `glutCreateMenu_ATEXIT_HACK':
c:/mingw/include/gl/freeglut_std.h:618: undefined reference to `_imp____glutCreateMenuWithExit@8'
obj\Debug\main.o: In function `Z4Drawv':
C:/Users/Jack/Programs/OpenGL/main.cpp:8: undefined reference to `glClear@4'
C:/Users/Jack/Programs/OpenGL/main.cpp:9: undefined reference to `glColor3f@12'
C:/Users/Jack/Programs/OpenGL/main.cpp:10: undefined reference to `glBegin@4'
C:/Users/Jack/Programs/OpenGL/main.cpp:11: undefined reference to `glVertex3f@12'
C:/Users/Jack/Programs/OpenGL/main.cpp:12: undefined reference to `glVertex3f@12'
C:/Users/Jack/Programs/OpenGL/main.cpp:13: undefined reference to `glEnd@0'
C:/Users/Jack/Programs/OpenGL/main.cpp:14: undefined reference to `glFlush@0'
obj\Debug\main.o: In function `Z10Initializev':
C:/Users/Jack/Programs/OpenGL/main.cpp:17: undefined reference to `glClearColor@16'
C:/Users/Jack/Programs/OpenGL/main.cpp:18: undefined reference to `glMatrixMode@4'
C:/Users/Jack/Programs/OpenGL/main.cpp:19: undefined reference to `glLoadIdentity@0'
C:/Users/Jack/Programs/OpenGL/main.cpp:20: undefined reference to `glOrtho@48'
obj\Debug\main.o: In function `main':
C:/Users/Jack/Programs/OpenGL/main.cpp:24: undefined reference to `_imp__glutInitDisplayMode@4'
C:/Users/Jack/Programs/OpenGL/main.cpp:25: undefined reference to `_imp__glutInitWindowSize@8'
C:/Users/Jack/Programs/OpenGL/main.cpp:26: undefined reference to `_imp__glutInitWindowPosition@8'
C:/Users/Jack/Programs/OpenGL/main.cpp:29: undefined reference to `_imp__glutDisplayFunc@4'
C:/Users/Jack/Programs/OpenGL/main.cpp:30: undefined reference to `_imp__glutMainLoop@0'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
19 error(s), 0 warning(s) (0 minute(s), 0 second(s))

I am using code blocks on a windows 7 system.

This is my new error

Building to ensure sources are up-to-date
Selecting target: 
Debug
Adding source dir: C:\Users\Jack\Programs\OpenGL\
Adding source dir: C:\Users\Jack\Programs\OpenGL\
Adding file: C:\Users\Jack\Programs\OpenGL\bin\Debug\OpenGL.exe
Changing directory to: C:/Users/Jack/Programs/OpenGL/.
Set variable: PATH=.;C:\MinGW\bin;C:\MinGW;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;c:\Program Files (x86)\Intel\iCLS Client;c:\Program Files\Intel\iCLS Client;C:\Program Files\Broadcom\Broadcom 802.11 Network Adapter\Driver;\;C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\WIDCOMM\Bluetooth Software;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Microsoft SQL Server\110\Tools\Binn;c:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn;c:\Program Files\Microsoft SQL Server\100\Tools\Binn;c:\Program Files\Microsoft SQL Server\100\DTS\Binn;C:\Program Files (x86)\CMake 2.8\bin
Starting debugger: C:\MinGW\bin\gdb.exe -nx -fullname  -quiet  -args C:/Users/Jack/Programs/OpenGL/bin/Debug/OpenGL.exe
failed
Était-ce utile?

La solution

Headers are just tables of contents for the compiler. You also need to add the actual libraries to the project build linker options, so that a working executable can be created. You need to add -lopengl32 -lglut to the compiler options.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top