如何在Linux上使用带有Windows交叉编译器的过剩?

时间:2011-09-04 01:28:43

标签: c++ opengl glut undefined-reference

我有一个Linux的mingw32交叉编译器,可以在linux上编译windows二进制文件。一切都很顺利,直到我需要安装过剩...我在linux上安装得很好但是每当我尝试在Windows上编译相同的程序时我都可以把它归结为:

  

/tmp/ccQhHDhy.o:main.cpp :(。text + 0xf):对__imp__glClear' /tmp/ccQhHDhy.o:main.cpp:(.text+0x1e): undefined reference to _ imp _glBegin'的未定义引用   /tmp/ccQhHDhy.o:main.cpp:(.text+0x3d):对__imp__glVertex3f' /tmp/ccQhHDhy.o:main.cpp:(.text+0x5c): undefined reference to _ imp _glVertex3f'的未定义引用   /tmp/ccQhHDhy.o:main.cpp:(.text+0x7b):对__imp__glVertex3f' /tmp/ccQhHDhy.o:main.cpp:(.text+0x85): undefined reference to _ imp _glEnd'的未定义引用

直接与dll链接

获取这些链接器错误后,我尝试将opengl32 gdi32 winmm链接到glut lib文件和glu32

但仍然是这个

继承源代码:

#include <stdlib.h>
#include <GL/glut.h>
using namespace std;
void render(void);
int main(int argc, char **argv){
    glutInit(&argc, argv);
    glutInitWindowPosition(-1,-1);
    glutInitWindowSize(500,500);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("My First Glut Application");
    glutDisplayFunc(render);
    glutMainLoop();
    return 0;
}

void render(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glBegin(GL_TRIANGLES);
        glVertex3f(-0.5, -0.5, 0.0);
        glVertex3f(0.5, 0.0, 0.0);
        glVertex3f(0.0, .5, 0.0);
    glEnd();


}

2 个答案:

答案 0 :(得分:2)

您的程序可以在Windows中无错误地编译。存在链接错误的原因可能是您没有使用正确的makefile。但是,您的代码中存在一些错误。您可以进行以下更改:

  • glutSwapBuffers()功能的末尾添加render

然后使用makefile for mingw:

g++ -o prog -c prog.cpp -lopengl32 -lfreeglut -lglu32

答案 1 :(得分:0)

我最终尝试了freeglut并且在交叉编译失败之后。我有预编译的Windows二进制文件和更改后 #include <GL/glut.h>

#include <GL/freeglut.h>

并与freeglut32建立联系 并感谢肖恩指出这些错误