使用 CMake 在 Mac 上链接静态 GLFW 和 OpenGL

Dblock247

我正在尝试在 Mac 上测试 glfw3。我无法构建一个简单的项目,因为我无法链接到 OpenGL。

目录结构

├── CMakeLists.txt
├── OpenGL
│   ├── Application.cpp
│   ├── CMakeLists.txt
│   └── dependencies
│       └── GLFW
│           ├── include
│           │   └── GLFW
│           │       ├── glfw3.h
│           │       └── glfw3native.h
│           ├── lib
│           │   └── libglfw3.a
│           └── src
└── bin

CMakeList.txt

顶级 CMakeList.txt

cmake_minimum_required(VERSION 3.11)

set(CMAKE_CXX_STANDARD 17)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

add_subdirectory(OpenGL)

嵌套 CMakeList.txt

cmake_minimum_required(VERSION 3.11)
project(OpenGL)

find_package(OpenGL REQUIRED)

add_executable(OpenGL Application.cpp)

target_include_directories(OpenGL PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/GLFW/include)
target_link_libraries(OpenGL ${OPENGL_LIBRARIES} ${CMAKE_CURRENT_SOURCE_DIR}/dependencies/GLFW/lib/libglfw3.a)

Applicatin.cpp(从glfw.org直接带到这里

#include <iostream>
#include <GLFW/glfw3.h>

int main()
{
    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", nullptr, nullptr);
    if (!window)
    {
        glfwTerminate();
        return -1;
    }

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    {
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT); <-- this line throws an error

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

错误信息

make[3]: *** No rule to make target '../OpenGL/dependencies/GLFW/include/lib/libglfw3.a', needed by '../bin/OpenGL'.  Stop.
make[3]: *** Waiting for unfinished jobs....
[ 50%] Building CXX object OpenGL/CMakeFiles/OpenGL.dir/Application.cpp.o
/Users/dblock/CLionProjects/OpenGL/OpenGL/Application.cpp:27:17: error: use of undeclared identifier 'GL_COLOR_BUFFER_BIT'
        glClear(GL_COLOR_BUFFER_BIT);
                ^
1 error generated.
make[3]: *** [OpenGL/CMakeFiles/OpenGL.dir/build.make:63: OpenGL/CMakeFiles/OpenGL.dir/Application.cpp.o] Error 1
make[2]: *** [CMakeFiles/Makefile2:86: OpenGL/CMakeFiles/OpenGL.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:98: OpenGL/CMakeFiles/OpenGL.dir/rule] Error 2
make: *** [Makefile:118: OpenGL] Error 2

我的 IDE (CLion) 说明如下

Can't resolve variable 'glClear'
Can't resolve variable 'GL_COLOR_BUFFER_BIT'

请让我知道我哪里出错了。

编辑

我添加了#import,现在我收到一个新错误

/usr/local/Cellar/cmake/3.11.1/bin/cmake --build /Users/dblock/CLionProjects/OpenGL/cmake-build-debug --target OpenGL -- -j 4
make[3]: *** No rule to make target '../OpenGL/dependencies/GLFW/include/lib/libglfw3.a', needed by '../bin/OpenGL'.  Stop.
make[2]: *** [CMakeFiles/Makefile2:86: OpenGL/CMakeFiles/OpenGL.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:98: OpenGL/CMakeFiles/OpenGL.dir/rule] Error 2
make: *** [Makefile:118: OpenGL] Error 2

解决方案

#include <OpenGL/gl.h> //<-- add this included to main.cpp fixed my issue
阿萨克

IDE 清楚地表明没有找到声明glClearGL_COLOR_BUFFER_BIT

由于 OpenGL 是一种标准/规范,因此驱动程序制造商将规范实现到特定显卡支持的驱动程序。由于OpenGL驱动有很多不同的版本,其大部分函数的位置在编译时是未知的,需要在运行时查询。然后开发人员的任务是检索他/她需要的函数的位置并将它们存储在函数指针中以供以后使用。

您需要声明 OpenGL 函数的标头和加载这些函数的加载器。值得庆幸的是,也有一些用于此目的的库,其中 GLAD 是一个流行且最新的库。

生成 GLAD 加载器/标题 - http://glad.dav1d.de

更新目录结构:

├── CMakeLists.txt
├── OpenGL
│   ├── Application.cpp
│   ├── CMakeLists.txt
│   ├── glad.c
│   └── dependencies
│       ├── GLFW
│       │   └── ...
│       ├── glad
│       │   └── glad.h
│       └── KHR
│           └── khrplatform.h
└── bin

更新嵌套的 CMakeList.txt:

set(SOURCES Application.cpp glad.c)
add_executable(OpenGL ${SOURCES})
target_include_directories(OpenGL PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/dependencies)

更新 Applicatin.cpp:

#include <glad/glad.h>
#include <GLFW/glfw3.h>
...

glfwMakeContextCurrent(window);

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{ 
  // Failed to create GLFW window
  glfwTerminate();
  return -1;
}
// now you can use OpenGL functions

GLAD github 中的更多信息,完整示例优秀的 OpenGL教程

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Haskell openGL和GLUT是否在Mac OS X上冻结?我可以在GLUT上使用GLFW吗?

来自分类Dev

OpenGL无法使用GLFW和GLLoadGen在Mavericks上绘图

来自分类Dev

如何使用cmake在OSX上编译glfw

来自分类Dev

CMAKE GLFW链接问题

来自分类Dev

带有GLFW和GLEW的OpenGL-在Windows上使用gcc进行编译

来自分类Dev

在Mac OSX 10.8.4上具有GLFW3的现代OpenGL-缺少glGenVertexArrays()和glBindVertexArray()吗?

来自分类Dev

使用g ++ mac包含GLEW,glfw3和glm

来自分类Dev

在OSX上使用CMake将项目与GLFW3链接时,未定义符号

来自分类Dev

在OSX上使用CMake将项目与GLFW3链接时,未定义符号

来自分类Dev

在Mac OS X 10.9中使用GLFW创建OpenGL 3.3上下文

来自分类Dev

如何在Ubuntu中使用CMake查找和链接OpenGL(mesa)包

来自分类Dev

无法使用 CMake 链接到 Mac 上的 .so 文件

来自分类Dev

使用CMake链接到Windows上的静态库的问题

来自分类Dev

在Mesa 10和GLFW3中使用OpenGL核心配置文件

来自分类Dev

在Mesa 10和GLFW3中使用OpenGL核心配置文件

来自分类Dev

CMake链接glfw3 lib错误

来自分类Dev

无法获取cmake链接到GLFW库

来自分类Dev

OpenGL GLFW构建错误或链接错误

来自分类Dev

在Windows上使用ANGLE和GLFW设置C ++项目

来自分类Dev

使用CMake链接静态库

来自分类Dev

使用CMake的OpenGL + Qt

来自分类Dev

OpenGL(GLFW / GLEW)的屏幕上无显示

来自分类Dev

是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

来自分类Dev

[cmake]如何使用cmake在Windows上包含和链接系统库

来自分类Dev

OpenGL和GLFW:不绘制多边形

来自分类Dev

Mac OS Maverick for C上的基本Cmake和make

来自分类Dev

CMake 在 Mac 上失败

来自分类Dev

glfw和MSVS 2012的链接器错误

来自分类Dev

使用CMake将共享库与静态链接

Related 相关文章

  1. 1

    Haskell openGL和GLUT是否在Mac OS X上冻结?我可以在GLUT上使用GLFW吗?

  2. 2

    OpenGL无法使用GLFW和GLLoadGen在Mavericks上绘图

  3. 3

    如何使用cmake在OSX上编译glfw

  4. 4

    CMAKE GLFW链接问题

  5. 5

    带有GLFW和GLEW的OpenGL-在Windows上使用gcc进行编译

  6. 6

    在Mac OSX 10.8.4上具有GLFW3的现代OpenGL-缺少glGenVertexArrays()和glBindVertexArray()吗?

  7. 7

    使用g ++ mac包含GLEW,glfw3和glm

  8. 8

    在OSX上使用CMake将项目与GLFW3链接时,未定义符号

  9. 9

    在OSX上使用CMake将项目与GLFW3链接时,未定义符号

  10. 10

    在Mac OS X 10.9中使用GLFW创建OpenGL 3.3上下文

  11. 11

    如何在Ubuntu中使用CMake查找和链接OpenGL(mesa)包

  12. 12

    无法使用 CMake 链接到 Mac 上的 .so 文件

  13. 13

    使用CMake链接到Windows上的静态库的问题

  14. 14

    在Mesa 10和GLFW3中使用OpenGL核心配置文件

  15. 15

    在Mesa 10和GLFW3中使用OpenGL核心配置文件

  16. 16

    CMake链接glfw3 lib错误

  17. 17

    无法获取cmake链接到GLFW库

  18. 18

    OpenGL GLFW构建错误或链接错误

  19. 19

    在Windows上使用ANGLE和GLFW设置C ++项目

  20. 20

    使用CMake链接静态库

  21. 21

    使用CMake的OpenGL + Qt

  22. 22

    OpenGL(GLFW / GLEW)的屏幕上无显示

  23. 23

    是否可以使用glfw3在Macbok Pro 2015 mid上运行OpenGL 3.0?

  24. 24

    [cmake]如何使用cmake在Windows上包含和链接系统库

  25. 25

    OpenGL和GLFW:不绘制多边形

  26. 26

    Mac OS Maverick for C上的基本Cmake和make

  27. 27

    CMake 在 Mac 上失败

  28. 28

    glfw和MSVS 2012的链接器错误

  29. 29

    使用CMake将共享库与静态链接

热门标签

归档