【问题标题】:How do you compile a C file that includes glut?如何编译包含 glut 的 C 文件?
【发布时间】:2021-11-14 15:46:09
【问题描述】:

目前使用 Visual Studio 代码创建一个使用 glut 进行图形的游戏,正如 #include "GL/glut.h" 所包含的那样,但是当我编译它时

gcc main.c -o test

我遇到了

C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x1c): undefined reference to `_imp____glutInitWithExit@12\
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x3f): undefined reference to `_imp____glutCreateWindowWithExit@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x61): undefined reference to `_imp____glutCreateMenuWithExit@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0xa77): undefined reference to `glBegin@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0xa90): undefined reference to `glColor3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0xb49): undefined reference to `glVertex2d@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0xb60): undefined reference to `glVertex2d@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0xb68): undefined reference to `glEnd@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x54a8): undefined reference to `glEnable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x54bf): undefined reference to `glBlendFunc@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x55dc): undefined reference to `glClear@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x55eb): undefined reference to `glMatrixMode@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x55f3): undefined reference to `glLoadIdentity@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5609): undefined reference to `glScalef@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5634): undefined reference to `gluPerspective@32'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5643): undefined reference to `glMatrixMode@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x564b): undefined reference to `glLoadIdentity@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x568a): undefined reference to `gluLookAt@72'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x57d1): undefined reference to `glEnableClientState@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x57e0): undefined reference to `glEnableClientState@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5807): undefined reference to `glVertexPointer@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x582e): undefined reference to `glTexCoordPointer@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x584e): undefined reference to `glDrawArrays@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5875): undefined reference to `glVertexPointer@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x589c): undefined reference to `glTexCoordPointer@16'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x58bc): undefined reference to `glDrawArrays@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x58cb): undefined reference to `glDisable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x58da): undefined reference to `glBegin@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x58f3): undefined reference to `glColor3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x590c): undefined reference to `glVertex3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5927): undefined reference to `glVertex3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5940): undefined reference to `glVertex3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x595b): undefined reference to `glVertex3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5974): undefined reference to `glColor3f@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x597c): undefined reference to `glEnd@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5988): undefined reference to `glEnable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5990): undefined reference to `_imp__glutPostRedisplay@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5997): undefined reference to `_imp__glutSwapBuffers@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x599e): undefined reference to `glFlush@0'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x59f6): undefined reference to `_imp__glutSetCursor@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5a53): undefined reference to `_imp__glutSetCursor@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5b8c): undefined reference to `_imp__glutWarpPointer@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5bef): undefined reference to `_imp__glutGet@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5c05): undefined reference to `_imp__glutGet@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5ccd): undefined reference to `_imp__glutInitDisplayMode@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5ce6): undefined reference to `_imp__glutInitWindowSize@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5cff): undefined reference to `_imp__glutInitWindowPosition@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d1f): undefined reference to `_imp__glutKeyboardFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d30): undefined reference to `_imp__glutKeyboardUpFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d41): undefined reference to `_imp__glutDisplayFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d52): undefined reference to `_imp__glutReshapeFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d63): undefined reference to `glEnable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d78): undefined reference to `glAlphaFunc@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d87): undefined reference to `_imp__glutSetCursor@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5d98): undefined reference to `glEnable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5db1): undefined reference to `_imp__glutPassiveMotionFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5dc2): undefined reference to `_imp__glutMotionFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5dd3): undefined reference to `_imp__glutMouseFunc@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5dec): undefined reference to `glPixelStorei@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5e03): undefined reference to `glGenTextures@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5e1b): undefined reference to `glBindTexture@8'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5e6f): undefined reference to `glTexImage2D@36'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5e90): undefined reference to `glTexParameterf@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5eb1): undefined reference to `glTexParameterf@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5ed2): undefined reference to `glTexParameterf@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5ef3): undefined reference to `glTexParameterf@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5f12): undefined reference to `glTexEnvi@12'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5f21): undefined reference to `glEnable@4'
C:\Users\playtech\AppData\Local\Temp\ccgUQvpv.o:main.c:(.text+0x5f29): undefined reference to `_imp__glutMainLoop@0'
collect2.exe: error: ld returned 1 exit status

在谷歌搜索解决方案后,我也尝试过(-lglut、-lGLU 和 -lGL 的组合)

gcc main.c -o test -lglut

返回

c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lGL
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lGLU
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lglut

然而,我已经在我的 mac 上的 XCode 中打开了该文件,虽然 gcc 的终端命令遇到了类似的 clang 错误,但 XCode 内置的“build”成功地创建了应用程序。

此外,我的代码使用了很多 VLA,而 C++ 对此不起作用,所以我真的很想让它适用于 C。Visual Studio 2019 也不喜欢构建我的解决方案,因为它没有'不喜欢 VLA's。

当它包含 glut 时,如何让 gcc 编译这个文件?谢谢

【问题讨论】:

标签: c compiler-errors linker-errors glut


【解决方案1】:

您需要添加-L<Directory name> 来告诉编译器在哪里可以找到您要链接的库(glut、GLU 和 GL),因为在标准目录列表中找不到它们。

参考gcc官方文档: https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html

-图书馆 -l library 链接时搜索名为 library 的库。 (将库作为单独参数的第二种选择仅适用于 POSIX 合规性,不推荐。)

-l 选项由 GCC 直接传递给链接器。请参阅您的 链接器文档以获取确切的详细信息。下面的一般描述 适用于 GNU 链接器。

链接器搜索库的标准目录列表。 搜索的目录包括几个标准的系统目录 加上您使用 -L 指定的任何内容

现有的问题和答案将提供明确的示例: How to include needed C library using gcc?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 2012-05-15
    相关资源
    最近更新 更多