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
Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top