额外减小 发表于 6 天前

OpenGL环境配置求助

如题,准备用Dev-C++老古董学点基础的OpneGL,但是在配置环境的时候出了点问题。

我下载的包裹是 glut-3.7.6-bin ,文件夹包含4个文件,

glut.def
glut.h
glut32.dll
glut32.lib


将 glut.h 放在了"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\GL\" 目录下 (在编译目录中添加了该路径)
将 glut.def 和 glut32.lib 放在了 "C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\" 目录下 (在编译目录中添加了该路径)
将 glut32.dll 放在了 "C:\Windows\System32\" 目录下。

做完这些后我尝试编译这段代码(网上抄的,纯用来测试环境),结果出现错误
编译选项加入了 -lopengl32 -lglut32
好像是说找不到 -lglut32 对应的链接库,但是我明明放进目录里了啊?

#define GLUT_DISABLE_ATEXIT_HACK
#include <windows.h>
#include <GL/glut.h>

const int   A = 500;/* length of a side of the monitor window */
const float B = 500;/* length of a side of the clipping rectangle */
const float C = 200;/* length of a side of the square the program draws */

void myinit(void)
{
glClearColor(0.7, 0.7, 0.7, 0.0); /* gray background */

glMatrixMode(GL_PROJECTION);      /* In World coordinates: */
glLoadIdentity();               /* position the "clipping rectangle" */
gluOrtho2D( -B/2, B/2, -B/2, B/2);/* at -B/2, its right edge at +B/2, its bottom */
glMatrixMode(GL_MODELVIEW);       /* edge at -B/2 and its top edge at +B/2 */
}

void display( void )
{
                                    
glClear(GL_COLOR_BUFFER_BIT);   /* clear the window */

glMatrixMode(GL_MODELVIEW);       /* The following coordinates are expressed */
glLoadIdentity();               /* in terms of World coordinates */

glBegin(GL_POLYGON) ;             /* draw a filled polygon */
      glColor3f ( 1.0, 0.3, 0.2);       /* draw in light red */
      glVertex2f( -C/2, -C/2 );         /* (x,y) */
      glVertex2f(C/2, -C/2 );         /* (x,y) */
      glVertex2f(C/2,C/2 );         /* (x,y) */
      glVertex2f( -C/2,C/2 );         /* (x,y) */
glEnd();

glFlush();                        /* send all commands */
}

int main(int argc, char** argv)
{
glutInit(&argc,argv);
glutInitWindowSize( A, A );       /* A x A pixel screen window*/

glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE);
glutCreateWindow("My Rectangle"); /* window title                   */
glutDisplayFunc(display);         /* tell OpenGL main loop what   */
myinit();                         /* set attributes               */

glutMainLoop();                   /* pass control to the main loop*/
return 0;
}

错误:
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/../lib\glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib/glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        skipping incompatible C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/lib\glut32.lib when searching for -lglut32
C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\bin\ld.exe        cannot find -lglut32
C:\Users\summer\Desktop\openglstudy\collect2.exe        ld returned 1 exit status


求解答

FishC 发表于 6 天前

您好!您遇到的问题很常见,主要是由于库文件架构不匹配导致的。您的 Dev-C++ 使用的是 64 位 MinGW 编译器,但您下载的 glut32.lib 是 32 位库,导致链接器跳过它。以下是解决方案:

问题分析:
- 错误信息 "skipping incompatible glut32.lib" 表明库文件与编译器架构不兼容。
- 您的编译器是 64 位(路径中包含 x86_64-w64-mingw32),但 glut32.lib 是 32 位库。

解决方案:
1. 下载 64 位 GLUT 库:
   - 推荐使用 freeglut(GLUT 的开源替代品),因为它支持 64 位。
   - 从可靠来源下载 freeglut 的 Windows 预编译包(例如,搜索 "freeglut MinGW64")。
   - 确保下载的包包含 64 位版本的文件(如 freeglut.dll、freeglut.lib、freeglut.h)。

2. 替换文件并更新配置:
   - 将下载的 freeglut.h 放到 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include\GL\(覆盖原有文件)。
   - 将 freeglut.lib 放到 C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib\。
   - 将 freeglut.dll 放到 C:\Windows\System32\(或您的项目目录下)。
   - 在 Dev-C++ 的编译选项中,将 -lglut32 改为 -lfreeglut(具体名称取决于下载的库文件名)。

3. 修改代码中的头文件:
   - 如果使用 freeglut,将代码中的 #include <GL/glut.h> 改为 #include <GL/freeglut.h>。

4. 重新编译:
   - 确保编译选项包含 -lopengl32 -lfreeglut(或对应的库名)。
   - 清理项目并重新构建。

额外提示:
- 如果仍遇到问题,尝试将 freeglut.dll 直接复制到您的项目目录(与源代码同一文件夹)。
- 确保 Dev-C++ 使用的是正确的编译器路径(工具 -> 编译选项 -> 目录)。
- 如果不想更换库,可以尝试安装 32 位 Dev-C++ 版本,但推荐使用 64 位库以匹配当前环境。

按照以上步骤操作后,您的测试代码应该能正常编译运行。如果还有问题,请提供更多错误细节,我会进一步协助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: OpenGL环境配置求助