MinGW和GLUT未定义引用“_imp____glutInitWithExit@12”

4

我是一名初学者,曾经涉猎Python一年,现在开始接触C++。我安装了MinGW,并且一切都正常工作,直到我安装了freeglut。当我运行以下代码时:

#include <gl/glut.h>

int main()
{
    return 0;
}

使用:

C:\code\cpp>g++ GLtest1.cpp

I get this:

C:\Users\User\AppData\Local\Temp\ccABWOyv.o:GLtest1.cpp:(.text+0x1c): undefined
reference to `_imp____glutInitWithExit@12'
C:\Users\User\AppData\Local\Temp\ccABWOyv.o:GLtest1.cpp:(.text+0x3e): undefined
reference to `_imp____glutCreateWindowWithExit@8'
C:\Users\User\AppData\Local\Temp\ccABWOyv.o:GLtest1.cpp:(.text+0x60): undefined
reference to `_imp____glutCreateMenuWithExit@8'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\U
ser\AppData\Local\Temp\ccABWOyv.o: bad reloc address 0x20 in section `.eh_frame'

c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link
 failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

我曾多次安装和重新安装MinGW,试图解决问题,但都没有成功。我试过使用。
#include <windows.h> 

同时,我尝试安装64位的.dll文件,但没有成功。如果有人之前遇到过这个问题或者对我的问题比较熟悉,欢迎提供帮助。谢谢。我猜我需要做一些与"链接"相关的事情,但我真的不明白为什么"glut.h"应该与"gl.h"或"glu.h"有任何不同。太令人沮丧了!
更新:
我尝试了一些链接的东西。首先我做了这个:
C:\code\cpp>g++ -c -o GLtest1.exe GLtest1.cpp -I"C:\MinGW\include"

一开始我进行了测试,没有出现任何错误。但是当我尝试连接其他内容时,出现了以下错误:

C:\code\cpp>g++ -o GLtest1.exe -L"C:\MinGW\lib" -lglut32 -opengl32
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot fin
d -lglut32
collect2.exe: error: ld returned 1 exit status

这里有什么想法吗?glut32.dll存在于System32和SysWOW64两个文件夹中。


1
dll文件是动态加载库(在运行时需要)。当您链接应用程序时,需要链接静态库(扩展名为.a或.lib的文件)。您可以使用-L开关告诉编译器在哪里查找静态库(类似于头文件的-I)。 - tumdum
2个回答

0

你需要链接到glut二进制文件:

g++ GLtest1.cpp -lglut32

  1. 我每次编译代码都需要链接吗?
  2. 对于 Windows 64 位操作系统,您建议使用“-lglut64”吗?
- Frumples
是的,要有可用的二进制文件,您需要每次执行链接。是的,我希望对于win64,名称将更改为glut64。 - tumdum
C:\code\cpp>g++ GLtest1.cpp -lglut32 c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: 找不到 -lglut32 collect2.exe: 错误: ld 返回 1 的退出状态 - Frumples
尝试从http://stackoverflow.com/questions/12919277/glut-program-link-error中获取一些内容。 - tumdum
我在尝试了您提供的链接中的一些方法后编辑了我的问题。 - Frumples

0

我的情况:我将库文件和二进制文件从64位切换到32位。然后它就可以工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接