window msys2 freeglut g++ 开发编译 c++ opengl应用 --入门(不用IDE)

序言

  1. 为什么要写这篇文章?
    因为不管是哪种语言go java python rust webgl 涉及到图像编程底层
    都要遇到c和c++,如果不懂c 对于图像 opengl 编程就无法推进

  2. 为了研究opengl 要储备哪些知识?
    编程语言 c,c++
    编译指令 gcc,g++
    linux脚本 shell
    开发编译和C库管理集成工具 msys2 (带有minGW 64 32版本)
    opengl 相关库 freeglut ,glad glfw ,wxWidgets等等 ,还有很多游戏引擎
    编译工具 make (还有一个cmake ) 暂时不学,大型项目要学

所有学习链接我就不一一列出,百度很全面 , 一篇看不懂还可以看看类似的文章,预计要看50多篇, 哈哈

接下来我只讲一些简单的,让我们快速的完成框架搭建

快速入门

  1. 安装msys2
    修改镜像源 C:\msys64\etc\pacman.d\mirror*.*
    把清华的提前到最上面
    让下载快一点

  2. 在msys2的msys shell中 安装 主要库 ,
    很简单,打开msys shell, 依次输入下面命令 都按 y就可
    pacman -S mingw-w64-x86_64-toolchain #工具链,建议全部安装
    pacman -S mingw-w64-x86_64-wxWidgets
    pacman -S mingw-w64-x86_64-freeglut
    pacman -Syu #全部更新一下

  3. 写一段c++代码 保存到 自定义目录/testut.cpp文件

#include 
#include 

void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0,0);
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;
}
  1. 进入 msys2-minGW64 shell
    因为msys2 shell
    会自动调用 minGW64/bin下的程序
    编译时会搜索 minGW64 文件夹下 include lib libexec 子目录的文件
    cd [自定义目录]
    例如:我在d: 下面创建了一个目录demo,里面存放 testut.cpp
    先进入该目录
    cd /d/demo/

  2. 再用编译器g++ 编译它
    正确:
    g++ testut.cpp -o testut.exe -lfreeglut -lopengl32
    g++ testut.cpp -lfreeglut -lopengl32 -o testut.exe
    错误例子:
    g++ -lfreeglut -lopengl32 -o testut.exe testut.cpp
    g++ -lfreeglut -lopengl32 testut.cpp -o testut
    库文件加载不能在源代码之前 因为 我们是先编译后链接

  3. 点击testut.exe 运行

  4. 你可以 用ldd testut.exe 查看所有依赖的动态库文件

注意

  1. 问gcc和g++ 编译时 需要指定库文件路径吗 , -L 库路径 ?
    答:不一定

如果在linux shell下面或msys2 shell 下面 执行g++指令,
因为shell 自带运行环境 ,
1)会自动加载 include下的头文件和lib 下的库文件
2)会自动搜索window PATH环境变量中所有路径的动态链接库
所以不需要再加-L指定库文件

如果用 window cmd 程序 就必须添加指定 -L库文件路径,
除非你把 msys2 /mingw64下面的include和lib 添加到path

g++ 本身还有环境变量
头文件路径的环境变量 (三选一): C_INCLUDE_PATH / CPLUS_INCLUDE_PATH / OBJC_INCLUDE_PATH
库文件路径环境变量 : LIBRARY_PATH
设置以后也可以不添加 -L指定库路径

  1. 运行exe程序时, 会弹出一个cmd窗,如何屏蔽 ?
    添加 参数 -mwindows 即可
    g++ src/testut.cpp -o testut.exe -lfreeglut -lopengl32 -mwindows
  2. 不建议 一开始就使用 vc++ ,dev c++这些IDE工具
    因为我们是为了学习c,c++语言,而不是为了学习IDE工具如何用
    即是我们要学各种IDE ,也必须搞懂c++ 编译指令g++和参数的意义

参考:

gcc,g++:
https://www.jianshu.com/p/1bab86143f1c

freeglut:
https://www.transmissionzero.co.uk/computing/using-glut-with-mingw/

其他知识请搜索菜鸟网站

你可能感兴趣的:(图像,c++,opengl,freeglut)