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

前言:

  本文写作目的:

  是由于本人参考 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. win10安装spacemacs

    参考: https://www.cnblogs.com/e190/p/10404927.html https://blog.csdn.net/u011729865/article/details/54 ...

  2. PYQT5登录界面跳转主界面方法

    该问题,有很多种方法,但是很多方法要么这个有问题,要么那个有问题,最后终于找到一种没问题的方法.记录一下: 参考地址:https://www.jianshu.com/p/d18ff36a78d6?fr ...

  3. MATLAB中“repmat”与“cat”函数的用法

    MATLAB中“repmat”与“cat”函数的用法 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. repmat函数 >> z=re ...

  4. C#行转列&绑定DGV

    c#行转列 今天工作中,恰好写到此处,想起之前第一次行转列的时候,卡壳了好久,今天正好碰上,故而花费几分钟,整理成案例,分享到博客上. 这是个很简单的功能,第一次可以使用案例,后面最好能达到信手拈来的 ...

  5. [已解决]ValueError: row index was 65536, not allowed by .xls format

    报错: ValueError: row index was 65536, not allowed by .xls format 解决方案: xlrd和xlwt处理的是xls文件,单个sheet最大行数 ...

  6. Codeforces #548 (Div2) - D.Steps to One(概率dp+数论)

    Problem   Codeforces #548 (Div2) - D.Steps to One Time Limit: 2000 mSec Problem Description Input Th ...

  7. jmeter(二十六)生成HTML性能测试报告

    性能测试工具Jmeter由于其体积小.使用方便.学习成本低等原因,在现在的性能测试过程中,使用率越来越高,但其本身也有一定的缺点,比如提供的测试结果可视化做的很一般. 不过从3.0版本开始,jmete ...

  8. QPen

    Help on class QPen in module PyQt5.QtGui: class QPen(sip.simplewrapper) |  QPen() |  QPen(Qt.PenStyl ...

  9. 类Object

    Object概述 java.lang.Object类是Java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类没有特别指定 ...

  10. (一)jdk8学习心得之遍历

    一.遍历 -- 最好和stream流连用 使用jdk8提供的forEach进行遍历时,采用的是多线程的操作,理论上讲是会比原来的方法更快.但是注意,系统启动时需要加载lambda框架的内容.因此如果通 ...