问题描述
我努力寻找有关使用 Cygwin-g++ 编译基本 OpenGL/GLFW 示例 Windows 的文档,因此我决定发布我自己问题的答案。
- 操作系统:Windows (10)
- 编译器:Cygwin g++ (x86_64-pc-cygwin)
- 代码:GLFW Documentation's Example Code(基本工作示例如下所示。如果一切构建/链接正确,则不会创建窗口,但应输出文本):
#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;
}
- 编译:{{1}}
问题
- 代码会编译和构建,但不会出现输出窗口
- 我当前的链接没问题,但不同的组合会导致
g++ -Wall -Iinclude main.cpp -o main.exe -L<folder glfw3.dll is in> -lglfw3 -lopengl32 -lgdi32
错误。
解决方法
这个答案是对来自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
添加到路径 -
编译
g++ -Wall -Iinclude main.cpp -o main.exe -LC:\cygwin64\usr\x86_64-pc-cygwin\bin -lglfw3 -lopengl32 -lgdi32
(将 -L 更改为 cygwin 的存储位置)。
等
- 第一个链接包含专门使用 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 设置为 ON。配置生成
$ 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服务器下运行
$ g++ main.cpp -o main -lglfw -L/usr/local/lib
$ ./main.exe
Code works