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

前言:

  本文写作目的:

  是由于本人参考 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. C#语言中的修饰符

    public:公有访问.不受任何限制. private:私有访问.只限于本类成员访问,子类和实例都不能访问. protected:保护访问.只限于本类和子类访问,实例不能访问. internal:内部 ...

  2. Loj #2331. 「清华集训 2017」某位歌姬的故事

    Loj #2331. 「清华集训 2017」某位歌姬的故事 IA 是一名会唱歌的女孩子. IOI2018 就要来了,IA 决定给参赛选手们写一首歌,以表达美好的祝愿.这首歌一共有 \(n\) 个音符, ...

  3. 去掉所有的html标签,得到HTML标签中的所有内容

    text——含有HTML标签的字符串 var text1=text.replace(/<\/?.+?>/g,""); text=text1.replace(/ /g,& ...

  4. 在混合开发框架模式中,简化客户端对Web API的频繁调用

    在混合开发框架模式中,有时候我们在处理树形节点的时候,需要很多关联的处理,可能需要结合用户配置信息,属性字典,以及表的字段分类等信息来展示一个结构树,那么在处理的时候就可能会频繁的对这些接口API进行 ...

  5. selenium跳过webdriver检测并爬取淘宝我已购买的宝贝数据

    简介 上一个博文已经讲述了如何使用selenium跳过webdriver检测并爬取天猫商品数据,所以在此不再详细讲,有需要思路的可以查看另外一篇博文. 源代码 # -*- coding: utf-8 ...

  6. Python-异常处理-66

    异常和错误 # 1/0 # name # 2+'3' # [][3] #{}['k'] try: ') # 1/0 ') # name # 2+'3' # [][3] # {}['k'] ret = ...

  7. day13(函数嵌套定义,global,nonlocal关键字,闭包,装饰器)

    一,复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...

  8. 企业推动移动化战略中为什么需要Moli?

    随着科技的进步,计算能力程指数上升,引爆人工智能的大发展,人类社会开始步进入智能时代.与此同时,端能力将演进到第三代,全面参与智能边缘计算,从PC互联到移动互联到万物互联,历史在快速演进:主流技术向物 ...

  9. 证明与计算(3): 二分决策图(Binary Decision Diagram, BDD)

    0x01 布尔代数(Boolean algebra) 大名鼎鼎鼎的stephen wolfram在2015年的时候写了一篇介绍George Boole的文章:George Boole: A 200-Y ...

  10. Charles抓包工具使用

    Charles抓包工具使用和进行接口数据模拟 打开软件,选择Tools  >>  Map Local  >>  勾选enable  >>  add  >> ...