【问题标题】:MinGW and GLUT undefined reference to '_imp____glutInitWithExit@12'MinGW 和 GLUT 未定义对 '_imp____glutInitWithExit@12' 的引用
【发布时间】:2014-01-18 22:51:01
【问题描述】:

我涉足 Python 一年,并且开始使用 c++,所以我是菜鸟。我安装了 MinGW 并且一切正常,直到我安装了 freeglut。当我运行以下代码时:

#include <gl/glut.h>

int main()
{
    return 0;
}

使用:

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

我明白了:

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

这里有什么想法吗? System32 和 SysWOW64 中都存在 glut32.dll

【问题讨论】:

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

标签: c++ windows glut freeglut windows64


【解决方案1】:

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

g++ GLtest1.cpp -lglut32

【讨论】:

  • 1.每次编译代码时都必须链接? 2. 您是否建议为 Windows 64 位操作系统执行“-lglut64”?
  • 是的,要让二进制文件工作,您需要每次都执行链接。是的,我希望对于 win64,名称将更改为 glut64。
  • 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退出状态
  • 在尝试了您提供的链接中的一些内容后,我编辑了我的问题。
【解决方案2】:

我的情况:我将 lib 文件和 bin 文件从 64 位切换到 32 位。它奏效了。

【讨论】:

    猜你喜欢
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2014-02-17
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多