如何在 Windows 上使用 Cygwin 编译和 Link 一个 OpenGL/GLFW 程序?

How to Compile and Link an OpenGL/GLFW Program with Cygwin on Windows?

我努力寻找有关使用 Cygwin-g++ 编译基本 OpenGL/GLFW 示例 Windows 的文档,所以我决定 post 回答我自己的问题。


    #define GLFW_DLL
    #include <GLFW/glfw3.h>
    #include <iostream>
    
    int main(void) {
        std::cout << "Code works" << std::endl;
        if (!glfwInit())
            return -1;
        glfwTerminate();
        return 0;
    }

问题

此答案是对 University of Michigan's EECS 487 building OpenGL/GLFW Apps

的解决方案的总结

安装验证 检查这些文件是否存在于 cygwin64 目录下。

  • 头文件:/usr/include/w32api/GL
  • 静态库:/lib/w32api/lib{opengl,gdi}32.a

安装 GLFW 二进制文件 GLFW Binaries

将文件从 GLFW 二进制文件复制到 Cygwin

  • \cygwin64\usr\x86_64-pc-cygwin\ 中粘贴来自 GLFW 二进制文件 include 文件的包含文件。你应该 \cygwin64\usr\x86_64-pc-cygwin\include\GLFW 里面有 .h 文件

  • C:\cygwin64\usr\x86_64-pc-cygwin\lib 中粘贴 GLFW 二进制文件的 lib-mingw-w64 文件夹中的 libglfw3.a 和 libglfw3dll.a

  • \cygwin64\usr\x86_64-pc-cygwin\bin中从上述文件夹

    粘贴glfw3.dll
  • \cygwin64\usr\x86_64-pc-cygwin\bin 添加到 PATH

  • 编译g++ -Wall -Iinclude main.cpp -o main.exe -LC:\cygwin64\usr\x86_64-pc-cygwin\bin -lglfw3 -lopengl32 -lgdi32(把-L改成你的cygwin存放的地方)。

等等

  • 第一个 link 包含专门使用 MingW 工具链以及 Linux、MacOS 和 Visual Studios
  • 进行构建的说明

为 Cygwin 构建 GLFW 的替代解决方案

下载glfw-3.3.4.zip然后

$ unzip glfw-3.3.4.zip
$ cd glfw-3.3.4
$ ccmake .

将BUILD_SHARED_LIBS设置为开启。配置生成

$ make
$ make install

Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/include/GLFW
-- Up-to-date: /usr/local/include/GLFW/glfw3.h
-- Up-to-date: /usr/local/include/GLFW/glfw3native.h
-- Up-to-date: /usr/local/lib/cmake/glfw3/glfw3Config.cmake
-- Up-to-date: /usr/local/lib/cmake/glfw3/glfw3ConfigVersion.cmake
-- Up-to-date: /usr/local/lib/cmake/glfw3/glfw3Targets.cmake
-- Up-to-date: /usr/local/lib/cmake/glfw3/glfw3Targets-noconfig.cmake
-- Up-to-date: /usr/local/lib/pkgconfig/glfw3.pc
-- Up-to-date: /usr/local/lib/libglfw.dll.a
-- Up-to-date: /usr/local/bin/cygglfw-3.dll

因此您将在 /usr/local
下安装正确的 Cygwin 版本 之后,运行 在 X server

$ g++ main.cpp -o main -lglfw -L/usr/local/lib

$ ./main.exe 
Code works