win10用gcc编译glut程序出现undefined reference to `_imp__glClear‘

2023-10-21 12:10

本文主要是介绍win10用gcc编译glut程序出现undefined reference to `_imp__glClear‘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原来Ubuntu的本子硬盘坏了,在家那段时间又想玩steam游戏,最后又刷成win10系统了。
直接说解决方法,首先要往原程序里添加include<windows.h>,然后编译时加上-lopengl32 -lglut32成功。感谢这位老哥,拯救我一晚上睡眠。https://blog.csdn.net/xxsp9999/article/details/79913410

总结下opengl的坑吧,这玩意好像每台电脑里都有内置,要画图唯一要加的就是glut的库,但是这个库最后一次维护已经是1998年了,有民间的维护版叫freeglut我也不敢用。贴下下载地址免得自己找不到了。
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
http://freeglut.sourceforge.net/

下载下来的glut包解压后有6个文件,vs用户可以在网上找教程配环境,gcc用户可以和源代码放到同一个文件夹下。
因为这个库还是1998年的,必然是32位的系统,vs安装时同时安了32和64位两种编译器,gcc大概率只有一种,不用-m32会提示“-lglut32文件不兼容,找-lglut32失败”用了又会提示“-lwinmin32文件不兼容……"网上说可以安32位兼容包,我没找到,最后又安了个32位的gcc。

这里科普一下文件也是有位数的,32位的文件64位系统大概率打不开,因此32位的glut.dll 64位的gcc用不了。linux系统下好像可以用readelf看文件的位数。

第二个就是opengl32.dll这个文件是所有电脑都有的并不在下载的包里,编译的时候加上-lopengl32你就会发现找不到的文件少了一半。另一半是由于当时多用windows做图形设计,glut.h中许多函数都是在windos.h基础上扩展的,因此必须用windows.h做桥梁,即使没用到windows编程。

最后贴出成功编译的语句:
“C:\Program Files (x86)\mingw-w64\i686-8.1.0-win32-dwarf-rt_v6-rev0\mingw32\bin\gcc.exe” abc.c -lglut32 -lopengl32

什么都没加时报的错:
加了<windows.h>
在这里插入图片描述
加了-lglut32
在这里插入图片描述
加了-lopengl32
在这里插入图片描述
3个都加就编译成功了。源代码
#include<stdio.h>
#include<windows.h>
#include"glut.h"
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow(“第一个OpenGL程序”);
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
代码来自:https://blog.csdn.net/u011501388/article/details/53121203

这篇关于win10用gcc编译glut程序出现undefined reference to `_imp__glClear‘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/254284

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

Linux编译器--gcc/g++使用方式

《Linux编译器--gcc/g++使用方式》文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念... 目录一、预编译指令1.1预处理功能1.2指令1.3问题扩展二、编译(生成汇编)三、汇编(生成二进制机器语

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO