Windows能用Linux编译器,关于c ++:如何在Linux上的Windows交叉编译器中使用glut?

我有一个用于Linux的mingw32交叉编译器,它可以在Linux上编译Windows二进制文件。 一切正常,直到我需要安装glut ...我在linux上安装得很好,但是每当我尝试在Windows上编译相同的程序时,我都可以将其简化为:

/tmp/ccQhHDhy.o:main.cpp:(.text+0xf): undefined reference to __imp__glClear'

/tmp/ccQhHDhy.o:main.cpp:(.text+0x1e): undefined reference to_imp_glBegin'

/tmp/ccQhHDhy.o:main.cpp:(.text+0x3d): undefined reference to __imp__glVertex3f'

/tmp/ccQhHDhy.o:main.cpp:(.text+0x5c): undefined reference to_imp_glVertex3f'

/tmp/ccQhHDhy.o:main.cpp:(.text+0x7b): undefined reference to __imp__glVertex3f'

/tmp/ccQhHDhy.o:main.cpp:(.text+0x85): undefined reference to_imp_glEnd'

通过直接与dll链接

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

但还是一样

这是源代码:

#include

#include

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();

}

在您的情况下,它不是我们需要查看的源代码,而是编译器/链接器调用。

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

在render函数的末尾添加glutSwapBuffers()。

然后将makefile用于mingw:

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

如前所述,您必须链接到库,而不是dll。 DLL是一个二进制文件,通常只包含很少的元数据,头文件和库文件提供使用dll所需的绑定(与共享库的概念相同)。

render和&render之间没有语义差异,它们都产生相同的结果。 写入glutDisplayFunc(render)并非错误。

我最终尝试了freeglut,但在交叉编译失败之后。 我得到了预编译的Windows二进制文件,并且在更改后

#include

#include

并与freeglut32链接有效

并感谢肖恩指出这些错误

如果使用freeglut,则无需进行此更改。 freeglut packpage包含一个名为" glut.h"的标头,该标头将称为freeglut_std.h。 此设置可确保代码跨平台,也就是说,无需更改代码,只需更改makefile或编译和链接命令即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值