macOS Mojave配置OpenGL开发环境
---恢复内容开始---
前言:
本文写作目的:
是由于本人参考 csdn原文 的方法配置环境时踩了很多坑,所以在此写一篇文防止以后用到。
工具:
Xcode
CMake
步骤:
准备工作:
Xcode一般Mac用户都安装了。
1. 在终端键入 xcode-select --install 安装Xcode command Line Tools, 里面包含了很多Apple打包的常用工具,一定要安装。
2. 本人踩的第一个坑是macOS Mojave把 /usr/local/ 路径下的 include 和 lib 文件夹移除了,后面配置会找不到,所以我们先在终端键入 cd /Library/Developer/CommandLineTools/Packages/ 然后键入 open macOS_SDK_headers_for_macOS_10..pkg 来将头文件和库文件安装到 /usr/include ; /usr/lib 。
3. 后面的步骤会涉及往 include 文件夹和 lib 文件夹里添加文件的操作,这两个文件夹是连系统管理员都禁止修改的 ,所以我们必须按以下步骤赋予我们操作的权限:
(1) 重启
(2) 启动立即按住 command + r , 进入恢复模式 ,在恢复模式里打开终端 , 键入 csrutil disable
(3) 重启
4. 之后安装CMake下载CMake ,下载macOS版本的dmg安装文件 , 安装CMake
5. 进入 下载GLFW,下载GLFW的Source Package (源代码)
6. 根据 learnopgl网“创建窗口”下方的CMake部分,将你下载的GLFW文件夹进行编译(记得在这个文件夹里再新建一个叫build的文件夹,用作CMake的编译目标文件夹)。编译完成后浏览一下 build/src ,里面有一个 libglfw3.a 文件,将它复制进 /usr/lib 文件夹中
7. 终端cd进你的build目录,依次键入 make 与 make install , 完成后关闭终端
8. 进入glad 在线服务 网站, 将语言(Language)设置为C/C++,在API选项中,选择3.3以上的OpenGL(gl)版本(我们的教程中将使用3.3版本,但更新的版本也能正常工作)。之后将模式(Profile)设置为Core,并且保证生成加载器(Generate a loader)的选项是选中的。现在可以先忽略拓展(Extensions)中的内容。都选择完之后,点击生成(Generate)按钮来生成库文件。然后在文件列表里点击glad.zip文件进行下载。
9. 下载后的压缩包有两个头文件文件夹(glad和KHR)和一个 glad.c 文件,解压出来 , 将此两个头文件文件夹与之前编译的glfw根目录里的include文件夹里的GLFW文件夹一并复制进 /usr/include 文件夹中 (重点)
10. 打开Xcode,新建一个macOS下的command Line tool工程,语言选择C++,进入工程配置(假设我们的工程就叫OpenGL):
(1) 在左侧文件栏右键(工程名)文件夹

选择 Add files to "(工程名)" , 将之前解压的 glad.c 文件添加进来,此文件实现了 glad.h 中的大量功能
(2) 左键点击(工程名)文件夹上方的(工程名),进入配置界面

首先如图在搜索框输入search,找到两个配置头文件和库文件的选项,双击它们来添加我们的路径:

然后我们移动到 Build Phases 选项卡,在 Link Binary With Libraries 中将五个 .framework 以及我们拷贝进lib的 libglfw3.a 文件添加进我们的工程 : (注意,五个framework文件可以直接在弹出的搜索框里搜索到,但是 libglfw3.a 需要我们手动点击 Add other 并在 /usr/bin 中找到)

现在,我们离成功不远了,在文件列表里新建一个 main.cpp , 添加如下内容测试( glad.h必须在glfw3.h上面 ):
#include <glad/glad.h>
#include <GLFW/glfw3.h> int main()
{
return 0;
}
此时有一定的可能Xcode会提示找不到这两个头文件,我就是踩了这个坑,明明配置里已经写清楚了怎么有这种神经错误.....
我的解决方案是,将 /usr/ 下的include和lib文件夹直接拷贝到一个你认为合适的地方,再在Xcode配置里改为你的路径。
现在,我猜你的Xcode已经能成功编译了,将你的 main.cpp 的内容改为我引用的csdn博主的代码来测试:
// System Headers
#include <glad/glad.h>
#include <GLFW/glfw3.h> // Standard Headers
#include <cstdio>
#include <cstdlib>
#include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height);//回调函数原型声明
void processInput(GLFWwindow *window); // settings
const unsigned int SCR_WIDTH = ;
const unsigned int SCR_HEIGHT = ; int main(int argc, char * argv[]) { //初始化GLFW
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, );
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, );
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
#ifdef __APPLE__
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // uncomment this statement to fix compilation on OS X
#endif
//创建一个窗口对象
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "FirstGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -;
}
//通知GLFW将我们窗口的上下文设置为当前线程的主上下文
glfwMakeContextCurrent(window);
//对窗口注册一个回调函数,每当窗口改变大小,GLFW会调用这个函数并填充相应的参数供你处理
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
//初始化GLAD用来管理OpenGL的函数指针
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -;
} //渲染循环
while(!glfwWindowShouldClose(window))
{
// 输入
processInput(window); // 渲染指令
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT); // 检查并调用事件,交换缓冲
glfwSwapBuffers(window);//检查触发事件
glfwPollEvents(); //交换颜色缓冲
} //释放/删除之前的分配的所有资源
glfwTerminate();
return EXIT_SUCCESS;
} //输入控制,检查用户是否按下了返回键(Esc)
void processInput(GLFWwindow *window)
{
if(glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
} // 当用户改变窗口的大小的时候,视口也应该被调整
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
// 注意:对于视网膜(Retina)显示屏,width和height都会明显比原输入值更高一点。
glViewport(, , width, height);
}
---------------------
作者:milletluo
来源:CSDN
原文:https://blog.csdn.net/lm409/article/details/78420044
版权声明:本文为博主原创文章,转载请附上博文链接!
不出意外的话,运行成功会出现一个啥也没有的绿色窗口,表明我们大功告成了!

macOS Mojave配置OpenGL开发环境的更多相关文章
- VC 6中配置OpenGL开发环境
2010,2012中配置类似 http://hi.baidu.com/yanzi52351/item/f9a600dffa4caa4ddcf9be1d VC 6中配置OpenGL开发环境 这里,我习惯 ...
- Windows 7 Visual Studio 2008配置OpenGL开发环境
Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...
- VS2010配置OpenGL开发环境
OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...
- cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project
下面是子龙山人录制的关于cocos2d-x3.0的视频教程,macOS下配置Android开发环境.使用cocos2d-console来新建执行project.怎样执行cocos2d-x 3.0win ...
- VS2010配置OpenGL开发环境(转)
OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...
- macOS 下配置 MAMP 开发环境(Mac + Apache + Mysql + PHP)
macOS 中已经内置了 PHP.Python.Ruby.Perl 等常用的脚本语言,以及 Apache HTTP 服务器,所以使用起来非常方便.本文以最新的 macOS Sierra 10.12 配 ...
- vs2015配置OpenGL开发环境
先吐槽下,不知道微软怎么整的,从win7开始,OpenGL的头文件更改到windows SDK中,不安装就不能用. 更搞笑的是,在win10下,vs2015安装还报win sdk安装失败,这典型的自己 ...
- [OpenGL]VS2010配置OpenGL开发环境
opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...
- 【最新版】从零开始在 macOS 上配置 Lua 开发环境
脚本语言,你可能更需要的是 Lua 不同的脚本语言有不同的特性,第一接触的脚本语言,可能会影响自己对整个脚本语言的理解和认知.我以前接触最多的脚本语言是 JavaScript.后果就是:我一度以为脚本 ...
随机推荐
- kali权限提升之本地提权
kali权限提升之本地提权 系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: ...
- CSS3中三角形及三角形组合图实现
几何之三角形及三角形的组合图案理论 三角形( triangle ['traɪæŋɡl])可以看成正方形对角线交叉形成的图形 若想得到编号①方向向下三角形,只需对编号②③④三角形让其透明tran ...
- KL散度、JS散度、Wasserstein距离
1. KL散度 KL散度又称为相对熵,信息散度,信息增益.KL散度是是两个概率分布 $P$ 和 $Q$ 之间差别的非对称性的度量. KL散度是用来 度量使用基于 $Q$ 的编码来编码来自 $P$ 的 ...
- fastJson反序列化异常,JSONException: expect ':' at 0, actual =
com.alibaba.fastjson.JSONException: expect , actual = at com.alibaba.fastjson.parser.DefaultJSONPars ...
- vpshere6 ESXI 禁止登陆 "执行此操作的权限被拒绝"
vCenter在添加ESXI主机时,锁定模式选择“正常”,导致无法直接登陆ESXI宿主机,现象如下: 解决方法:
- java 图片处理 base64编码和图片二进制编码相互转换
今天在弄小程序项目时,涉及上传图片的更改. 以下是代码: /** * -> base64 * @param imgFile * @return * @throws IOException */ ...
- Codeforces Round #545 (Div. 2)-Camp Schedule
题目要求,给定一个s序列,一个p序列,问能不能对s做相应的调整,使得s序列中,有尽可能多的p子串(可以重复) 最开始我拿到这个题目,也是一点头绪都没有,如何做调整呢? 首先考虑如何会有尽可能多的子串, ...
- [Alpha阶段]发布说明
[Alplha阶段]发布说明 小小易校园小程序发布说明 版本功能 [Alpha版本]功能说明 1.注册及登录功能 2.修改密码功能 3.自动登录.退出登录功能 4.个人资料修改及简历模板功能 5.查看 ...
- 通俗理解ZooKeeper是如何保证数据一致性的
https://blog.csdn.net/liuhaiabc/article/details/70771322 https://blog.csdn.net/zhaoyangjian724/artic ...
- jexus独立版设置支持https
先用命令找到libssl.so find / -name libssl.so.* 执行完命令之后找到libssl.so.x.x.x如(libssl.so.1.0.0) 再到jexus/runtime/ ...