---恢复内容开始---

前言:

  本文写作目的:

  是由于本人参考 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开发环境的更多相关文章

  1. VC 6中配置OpenGL开发环境

    2010,2012中配置类似 http://hi.baidu.com/yanzi52351/item/f9a600dffa4caa4ddcf9be1d VC 6中配置OpenGL开发环境 这里,我习惯 ...

  2. Windows 7 Visual Studio 2008配置OpenGL开发环境

    Windows 7 Visual Studio 2008配置OpenGL开发环境 glut下载地址: http://www.opengl.org/resources/libraries/glut/gl ...

  3. VS2010配置OpenGL开发环境

    OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...

  4. cocos2d-x3.0 macOS下配置Android开发环境以及使用cocos2d-console来新建执行project

    下面是子龙山人录制的关于cocos2d-x3.0的视频教程,macOS下配置Android开发环境.使用cocos2d-console来新建执行project.怎样执行cocos2d-x 3.0win ...

  5. VS2010配置OpenGL开发环境(转)

    OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...

  6. macOS 下配置 MAMP 开发环境(Mac + Apache + Mysql + PHP)

    macOS 中已经内置了 PHP.Python.Ruby.Perl 等常用的脚本语言,以及 Apache HTTP 服务器,所以使用起来非常方便.本文以最新的 macOS Sierra 10.12 配 ...

  7. vs2015配置OpenGL开发环境

    先吐槽下,不知道微软怎么整的,从win7开始,OpenGL的头文件更改到windows SDK中,不安装就不能用. 更搞笑的是,在win10下,vs2015安装还报win sdk安装失败,这典型的自己 ...

  8. [OpenGL]VS2010配置OpenGL开发环境

    opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...

  9. 【最新版】从零开始在 macOS 上配置 Lua 开发环境

    脚本语言,你可能更需要的是 Lua 不同的脚本语言有不同的特性,第一接触的脚本语言,可能会影响自己对整个脚本语言的理解和认知.我以前接触最多的脚本语言是 JavaScript.后果就是:我一度以为脚本 ...

随机推荐

  1. UI自动化之日志

    Python自动化测试中,日志输出功能是不能缺少的一部分.让我们来看看如何实现日志的输出吧 一.控制台输出日志 def get_logger(): try: if not os.path.exists ...

  2. A Diversity-Promoting Objective Function for Neural Conversation Models论文阅读

    本文来自李纪为博士的论文 A Diversity-Promoting Objective Function for Neural Conversation Models 1,概述 对于seq2seq模 ...

  3. 宝塔服务器面板 部署 thinkphp5 坑

    thinkphp5 在宝塔服务器上部署,出现的问题: 1. File not found. 原因: 宝塔服务器默认不支持 pathinfo 的路径访问:需要在软件 - PHP - 管理里面,安装php ...

  4. python3 重写、重用、重载

    重用重用是用于在对象的概念中,实现代码的重用性 在继承角度,在子类继承父类之后,重新使用父类属性方法即是代码的重用 在组合角度,在一个类中以另外一个类的对象作为数据属性,提高代码的重用性 重用的方式: ...

  5. 新建promise

    callback(){ const promise =new Promise((resolve,rejest)=>{ console.log('2') 代码 resolve('true') }) ...

  6. cocos creator入门

    前面的话 Cocos Creator 是一个完整的游戏开发解决方案,包括了 cocos2d-x 引擎的 JavaScript 实现,以及快速开发游戏所需要的各种图形界面工具.Cocos Creator ...

  7. HDU 4547 CD操作

    传送门 没啥好说的.就是一个LCA. 不过就是有从根到子树里任意一个节点只需要一次操作,特判一下LCA是不是等于v.相等的话不用走.否则就是1次操作. 主要是想写一下倍增的板子. 倍增基于二进制.暴力 ...

  8. 关于vue移动端的适配

    http://blog.csdn.net/z1712636234/article/details/77881685

  9. 关于flex布局【转】

    很受用,原文链接:http://blog.csdn.net/magneto7/article/details/70854472

  10. 第六届SD省赛 Circle of Friends

    Circle of Friends Time Limit: 2000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...