2012-10-16 46 views
2

我想編譯過剩程序GLUT程序鏈接錯誤

#include <GL/glut.h> 

int main(int argc, char **argv) { 

    // init GLUT and create Window 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
    glutInitWindowPosition(100,100); 
    glutInitWindowSize(320,320); 
    glutCreateWindow("Lighthouse3D- GLUT Tutorial"); 

    return 1; 

} 

編譯和鏈接命令:

gcc -o main.exe main.c -lglut32 

結果:

main.o:main.c:(.text.startup+0x1c): undefined reference to `glutInit' 
main.o:main.c:(.text.startup+0x28): undefined reference to `glutInitDisplayMode' 
main.o:main.c:(.text.startup+0x3c): undefined reference to `glutInitWindowPosition' 
main.o:main.c:(.text.startup+0x50): undefined reference to `glutInitWindowSize' 
main.o:main.c:(.text.startup+0x5c): undefined reference to `glutCreateWindow' 
collect2: ld returned 1 exit status   

過剩的實際庫文件(3.7 .6,名爲glut32.lib)位於mingw的lib文件夾中,包含文件位於include/GL中。

現在該做什麼?

+1

呃,[這個GLUT 3.7.6](http://user.xmission.com/~nate/glut.html)?如果是這樣,使用[FreeGLUT](http://freeglut.sourceforge.net/),因爲它實際上保持。 – genpfault

+0

這有幫助嗎? https://users.cs.jmu.edu/bernstdh/web/common/help/cpp_mingw-glut-setup.php。看起來你需要'g ++ ... -mwindows glut32.lib' – Derek

+0

或者更好的是,不要使用GLUT。例如嘗試使用SDL。 – Shahbaz

回答

2

請使用libglut.alibglut32.a而不是glut32.lib來嘗試。用minGW編譯過剩程序。

Win32的GLUT是原始GLUT庫的Windows端口。它不再被維護或支持。 MinGW「w32api」軟件包已經附帶兩個GLUT導入庫,「libglut.a」「libglut32.a」,但不帶有過度頭文件。

如果您曾經從互聯網上下載過一個GLUT頭文件,並試圖將應用程序與這些導入庫中的任何一個鏈接起來,那麼您可能會看到它失敗並出現各種未定義的引用。

Setting Up GLUT for Win32 With MinGW查找Setting Up GLUT for Win32 With MinGW

如果你想擁有libglut32.a和glu32.dll的自己 「打造」。

添加以下行包括/ GL/glut.h起始於線12:

#ifdef __MINGW32__ 
#define APIENTRY __stdcall 
#define CALLBACK __stdcall 
#endif 

在lib/glut/win32_winproc.c中註釋第21行,使其看起來像:

//#include <crtdbg.h> 

的makefile線5更換:

使用--enable-自動導入--enable-自動導入

運行make


已經嘗試過了與鏈接Setting Up GLUT for Win32 With MinGW中的指導example.c文件。

隨着預生成庫自行編譯庫。兩個作品。

以下是結果。

enter image description here

例GLUT應用

從上方Setting Up GLUT for Win32 With MinGW鏈路example.c。

#include <stdlib.h> 
#include <GL/glut.h> 

void keyboard(unsigned char key, int x, int y); 
void display(void); 


int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutCreateWindow("GLUT Test"); 
    glutKeyboardFunc(&keyboard); 
    glutDisplayFunc(&display); 
    glutMainLoop(); 

    return EXIT_SUCCESS; 
} 


void keyboard(unsigned char key, int x, int y) 
{ 
    switch (key) 
    { 
    case '\x1B': 
     exit(EXIT_SUCCESS); 
     break; 
    } 
} 


void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glColor3f(1.0f, 0.0f, 0.0f); 

    glBegin(GL_POLYGON); 
    glVertex2f(-0.5f, -0.5f); 
    glVertex2f(0.5f, -0.5f); 
    glVertex2f(0.5f, 0.5f); 
    glVertex2f(-0.5f, 0.5f); 
    glEnd(); 

    glFlush(); 
}