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

相关文章

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

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

这些心智程序你安装了吗?

原文题目:《为什么聪明人也会做蠢事(四)》 心智程序 大脑有两个特征导致人类不够理性,一个是处理信息方面的缺陷,一个是心智程序出了问题。前者可以称为“认知吝啬鬼”,前几篇文章已经讨论了。本期主要讲心智程序这个方面。 心智程序这一概念由哈佛大学认知科学家大卫•帕金斯提出,指个体可以从记忆中提取出的规则、知识、程序和策略,以辅助我们决策判断和解决问题。如果把人脑比喻成计算机,那心智程序就是人脑的