linux opengl 环境准备

本文指导如何在Linux环境下安装OpenGL开发所需组件,并通过编写基本代码创建一个黑色窗口,涉及glut、Xmu和Xi库的使用。


1、安装opengl的开发包

yum install mesa*

这个是opengl在linux上实现的一个开发包。

2、安装glut

用来辅助建立与平台无关的窗口,有不少实现,此处选择 freeglut

yum install freeglut*

3、安装Xmu开发包

检查:yum list *Xmu*

安装:

yum install libXmu-devel.i686

4、安装Xi开发包

检查 yum list *Xi*

安装:

 yum install libXi-devel.i686


5、写代码测试

(此处代码由http://w57w57w57.blog.163.com/blog/static/9607473520099297540393/拷贝而来)

#include <GL/glut.h>

void display()
{
glClear(GL_COLOR_BUFFER_BIT);

glBegin(GL_POLYGON);
glVertex2f(-0.5,-0.5);
glVertex2f(-0.5,0.5);
glVertex2f(0.5,0.5);
glVertex2f(0.5,-0.5);
glEnd();

int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutCreateWindow("Hello,world!");
glutDisplayFunc(display);
glutMainLoop();
}


编译链接:

gcc -I/usr/include -L/usr/local/lib -L/usr/lib -lglut -lGLU -lGL -lX11   -lXext -lXmu -lXi -lm hello.c -o hello


运行:

./hello

可以看到有个黑色的窗口生成。

点击关闭的时候,会报错误:留着以后分析吧。


*** glibc detected *** ./hello: double free or corruption (!prev): 0x09c47bb0 ***
======= Backtrace: =========
/lib/libc.so.6(+0x1cee31)[0x3c0e31]
/lib/libc.so.6(+0x1d1571)[0x3c3571]
/usr/lib/libdricore9.2.0-devel.so.1(_mesa_free_context_data+0x2d2)[0xe65372]
/usr/lib/libdricore9.2.0-devel.so.1(_mesa_destroy_context+0x27)[0xe65447]
/usr/lib/dri/swrast_dri.so(+0x2d21)[0x57fd21]
/usr/lib/dri/swrast_dri.so(+0x231b)[0x57f31b]
/usr/lib/libGL.so.1[0x244eb66]
/usr/lib/libGL.so.1[0x2429bc0]
/usr/lib/libGL.so.1[0x242a2f7]
/usr/lib/libX11.so.6(XCloseDisplay+0xab)[0x16ddab]
/usr/lib/libglut.so.3(fgDeinitialize+0x21b)[0x79c91b]
/usr/lib/libglut.so.3(glutMainLoopEvent+0xa59)[0x79f349]
/usr/lib/libglut.so.3(glutMainLoop+0x55)[0x79f3b5]
./hello[0x804870a]
/lib/libc.so.6(__libc_start_main+0xe6)[0x366d26]
./hello[0x80485c1]
======= Memory map: ========
00101000-0011e000 r-xp 00000000 08:02 179910     /lib/libgcc_s-4.4.7-20120601.so.1
0011e000-0011f000 rw-p 0001d000 08:02 179910     /lib/libgcc_s-4.4.7-20120601.so.1
00121000-00128000 r-xp 00000000 08:02 185289     /usr/lib/libSM.so.6.0.1
00128000-00129000 rw-p 00006000 08:02 185289     /usr/lib/libSM.so.6.0.1
00131000-00135000 r-xp 00000000 08:02 185279     /usr/lib/libXxf86vm.so.1.0.0
00135000-00136000 rw-p 00004000 08:02 185279     /usr/lib/libXxf86vm.so.1.0.0
00136000-00137000 r-xp 00000000 08:02 185276     /usr/lib/libX11-xcb.so.1.0.0
00137000-00138000 rw-p 00000000 08:02 185276     /usr/lib/libX11-xcb.so.1.0.0
00138000-00156000 r-xp 00000000 08:02 185141     /lib/ld-2.12.so
00156000-00157000 r--p 0001d000 08:02 185141     /lib/ld-2.12.so
00157000-00158000 rw-p 0001e000 08:02 185141     /lib/ld-2.12.so
00158000-0028d000 r-xp 00000000 08:02 185166     /usr/lib/libX11.so.6.3.0
0028d000-00291000 rw-p 00134000 08:02 185166     /usr/lib/libX11.so.6.3.0
00291000-002a8000 r-xp 00000000 08:02 185143     /lib/libpthread-2.12.so
002a8000-002a9000 r--p 00016000 08:02 185143     /lib/libpthread-2.12.so
002a9000-002aa000 rw-p 00017000 08:02 185143     /lib/libpthread-2.12.so
002aa000-002ac000 rw-p 00000000 00:00 0 
002ac000-002c9000 r-xp 00000000 08:02 185182     /lib/libselinux.so.1
002c9000-002ca000 r--p 0001c000 08:02 185182     /lib/libselinux.so.1
002ca000-002cb000 rw-p 0001d000 08:02 185182     /lib/libselinux.so.1
002ce000-002cf000 r-xp 00000000 00:00 0          [vdso]
002f7000-0030e000 r-xp 00000000 08:02 160324     /usr/lib/libXmu.so.6.2.0
0030e000-0030f000 rw-p 00017000 08:02 160324     /usr/lib/libXmu.so.6.2.0
00314000-00317000 r-xp 00000000 08:02 185154     /lib/libdl-2.12.so
00317000-00318000 r--p 00002000 08:02 185154     /lib/libdl-2.12.so
00318000-00319000 rw-p 00003000 08:02 185154     /lib/libdl-2.12.so
0031b000-00322000 r-xp 00000000 08:02 185144     /lib/librt-2.12.so
00322000-00323000 r--p 00006000 08:02 185144     /lib/librt-2.12.so
00323000-00324000 rw-p 00007000 08:02 185144     /lib/librt-2.12.so
00326000-0034e000 r-xp 00000000 08:02 185157     /lib/libm-2.12.so
0034e000-0034f000 r--p 00027000 08:02 185157     /lib/libm-2.12.so
0034f000-00350000 rw-p 00028000 08:02 185157     /lib/libm-2.12.so
00350000-004e1000 r-xp 00000000 08:02 185142     /lib/libc-2.12.so
004e1000-004e3000 r--p 00191000 08:02 185142     /lib/libc-2.12.so
004e3000-004e4000 rw-p 00193000 08:02 185142     /lib/libc-2.12.so
004e4000-004e7000 rw-p 00000000 00:00 0 
0057d000-00582000 r-xp 00000000 08:02 154455     /usr/lib/dri/swrast_dri.so
00582000-00583000 rw-p 00004000 08:02 154455     /usr/lib/dri/swrast_dri.so
00673000-00692000 r-xp 00000000 08:02 185165     /usr/lib/libxcb.so.1.1.0
00692000-00693000 rw-p 0001f000 08:02 185165     /usr/lib/libxcb.so.1.1.0
00695000-00697000 r-xp 00000000 08:02 185164     /usr/lib/libXau.so.6.0.0
00697000-00698000 rw-p 00001000 08:02 185164     /usr/lib/libXau.so.6.0.0
00789000-007bc000 r-xp 00000000 08:02 189151     /usr/lib/libglut.so.3.9.0
007bc000-007c1000 rw-p 00033000 08:02 189151     /usr/lib/libglut.so.3.9.0
007d5000-007e0000 r-xp 00000000 08:02 185280     /usr/lib/libdrm.so.2.4.0
007e0000-007e1000 rw-p 0000a000 08:02 185280     /usr/lib/libdrm.so.2.4.0
007e3000-007e6000 r-xp 00000000 08:02 185278     /usr/lib/libxcb-dri2.so.0.0.0
007e6000-007e7000 rw-p 00003000 08:02 185278     /usr/lib/libxcb-dri2.so.0.0.0
007f9000-0080a000 r-xp 00000000 08:02 185173     /usr/lib/libXext.so.6.4.0
0080a000-0080b000 rw-p 00011000 08:02 185173     /usr/lib/libXext.so.6.4.0
0080d000-00833000 r-xp 00000000 08:02 185160     /lib/libexpat.so.1.5.2
00833000-00835000 rw-p 00025000 08:02 185160     /lib/libexpat.so.1.5.2
00842000-00850000 r-xp 00000000 08:02 185175     /usr/lib/libXi.so.6.1.0
00850000-00851000 rw-p 0000d000 08:02 185175     /usr/lib/libXi.so.6.1.0
00853000-008d4000 r-xp 00000000 08:02 149628     /usr/lib/libGLU.so.1.3.1
008d4000-008d5000 rw-p 00081000 08:02 149628     /usr/lib/libGLU.so.1.3.1
009a7000-009ab000 r-xp 00000000 08:02 185177     /usr/lib/libXfixes.so.3.1.0
009ab000-009ac000 rw-p 00004000 08:02 185177     /usr/lib/libXfixes.so.3.1.0
00b75000-00b77000 r-xp 00000000 08:02 185180     /usr/lib/libXdamage.so.1.1.0
00b77000-00b78000 rw-p 00001000 08:02 185180     /usr/lib/libXdamage.so.1.1.0
00df7000-00dfb000 r-xp 00000000 08:02 152195     /lib/libuuid.so.1.3.0
00dfb000-00dfc000 rw-p 00003000 08:02 152195     /lib/libuuid.so.1.3.0
00dfc000-011a8000 r-xp 00000000 08:02 154458     /usr/lib/libdricore9.2.0-devel.so.1.0.0
011a8000-011b8000 rw-p 003ac000 08:02 154458     /usr/lib/libdricore9.2.0-devel.so.1.0.0
011b8000-011cd000 rw-p 00000000 00:00 0 
023d2000-0240d000 r-xp 00000000 08:02 189373     /usr/lib/libglapi.so.0.0.0
0240d000-02410000 rw-p 0003a000 08:02 189373     /usr/lib/libglapi.so.0.0.0
02410000-02411000 rw-p 00000000 00:00 0 
02413000-0248a000 r-xp 00000000 08:02 154461     /usr/lib/libGL.so.1.2.0
0248a000-0248c000 rw-p 00076000 08:02 154461     /usr/lib/libGL.so.1.2.0
04eb2000-04f93000 r-xp 00000000 08:02 185193     /usr/lib/libstdc++.so.6.0.13
04f93000-04f97000 r--p 000e0000 08:02 185193     /usr/lib/libstdc++.so.6.0.13
04f97000-04f99000 rw-p 000e4000 08:02 185193     /usr/lib/libstdc++.so.6.0.13
04f99000-04f9f000 rw-p 00000000 00:00 0 
04fa1000-04fb8000 r-xp 00000000 08:02 150659     /usr/lib/libICE.so.6.3.0
04fb8000-04fba000 rw-p 00016000 08:02 150659     /usr/lib/libICE.so.6.3.0
04fba000-04fbb000 rw-p 00000000 00:00 0 
05079000-05090000 r-xp 00000000 08:02 185277     /usr/lib/libxcb-glx.so.0.0.0
05090000-05091000 rw-p 00017000 08:02 185277     /usr/lib/libxcb-glx.so.0.0.0
05738000-05791000 r-xp 00000000 08:02 168511     /usr/lib/libXt.so.6.0.0
05791000-05795000 rw-p 00058000 08:02 168511     /usr/lib/libXt.so.6.0.0
08048000-08049000 r-xp 00000000 08:05 131261     /home/hadoop/Desktop/prog/opengl/openglhello/hello
08049000-0804a000 rw-p 00000000 08:05 131261     /home/hadoop/Desktop/prog/opengl/openglhello/hello
09be2000-09e03000 rw-p 00000000 00:00 0          [heap]
b6548000-b65a0000 rw-p 00000000 00:00 0 
b76f2000-b76fc000 rw-p 00000000 00:00 0 
b770a000-b770b000 rw-p 00000000 00:00 0 
bf949000-bf95e000 rw-p 00000000 00:00 0          [stack]
Aborted (core dumped)


### Linux 环境下开发环境的配置 #### Qt 开发环境配置 在 UOS 或其他 Linux 发行版中,Qt 的开发环境可以通过以下方式完成设置。首先需要从官方渠道获取 `.run` 文件并将其复制至 `/home` 用户目录下的某个子文件夹中[^1]。接着通过 `sudo chmod 777 xxx.run` 命令赋予该脚本执行权限,并运行它以启动图形化安装向导程序[^1]。 一旦安装完毕,在打开 Qt Creator 软件之后可能会发现 C++ 编译器未被正确识别的情况。此时应检查编译器路径以及相关依赖项是否已全部满足需求[^1]。 ```bash wget https://www.qt.io/download-qt-installer # 访问官方网站下载链接页面 chmod +x qt-unified-linux-x64-online.run # 修改权限以便于执行 ./qt-unified-linux-x64-online.run # 启动安装进程 ``` #### VSCODE 配置用于驱动开发的 Linux 环境 对于嵌入式系统的驱动开发者来说,Visual Studio Code 是一种轻量级却功能强大的编辑器选择方案之一。其核心在于合理定义 JSON 格式的项目属性文档来指定头文件搜索范围、宏定义列表以及其他必要的构建参数等内容[^2]。 下面展示了一个典型的 VSCode 工作区配置实例: ```json { "configurations": [ { "name": "Linux", "includePath": ["${workspaceFolder}/**", "/path/to/linux-source-code/**"], "defines": [], "compilerPath": "/path/to/cross_compiler/gcc-arm-none-eabi/bin/arm-none-eabi-gcc", "cStandard": "c11", "cppStandard": "gnu++14" } ], "version": 4 } ``` 注意替换其中占位符部分为实际使用的内核源码位置与交叉编译工具链的具体地址信息[^2]。 #### Go 语言开发环境搭建指南 针对 Golang 应用场景,则需先手动下载对应平台架构版本压缩包再解压到目标存储区域;随后调整 shell 初始化脚本(如 .bashrc),增加 GOPATH 和 PATH 变量声明语句从而支持全局调用 go binary files[^3]。 以下是具体实施步骤摘要: ```bash wget https://golang.org/dl/go1.18.3.linux-amd64.tar.gz # 获取最新稳定发行版镜像资源 tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz # 解压归档数据到系统标准库所在分区 echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc # 将 GO 安装目录加入默认查找路径集合之中去 source ~/.bashrc # 刷新当前 session 中生效新的更改记录 mkdir -p ~/go/{bin,pkg,src} # 创建符合惯例结构化的个人工作空间布局形式 echo 'export GOPATH=~/go' >> ~/.bashrc # 设定个性化 gopath 地址指向本地磁盘特定单元格里面 ``` #### OpenGL 图形编程预备事项 最后提及关于 OpenGL 渲染框架方面的准备工作要点提示如下所示:确保已经预先安装好 mesa-libGL-devel 类型的相关 RPM 包或者 libglu1-mesa-dev DEB 形态组件包体才行[^4]。另外还需留意窗口管理机制的选择差异性影响因素存在与否等问题状况发生概率大小程度不同而已罢了啦! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值