如何在 Windows 上使用 Cygwin 编译和 Link 一个 OpenGL/GLFW 程序?
How to Compile and Link an OpenGL/GLFW Program with Cygwin on Windows?
我努力寻找有关使用 Cygwin-g++ 编译基本 OpenGL/GLFW 示例 Windows 的文档,所以我决定 post 回答我自己的问题。
- OS: Windows (10)
- 编译器:Cygwin g++ (x86_64-pc-cygwin)
- 代码:GLFW Documentation's Example Code(基本工作示例如下所示。不会创建 window,但如果一切 builds/links 正确,应该输出文本):
#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;
}
- 编译:
g++ -Wall -Iinclude main.cpp -o main.exe -L<folder glfw3.dll is in> -lglfw3 -lopengl32 -lgdi32
问题
- 代码会编译和构建,但不会出现输出 window
- 我当前的链接没问题,但不同的组合会导致
undefined reference
个错误。
此答案是对 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
我努力寻找有关使用 Cygwin-g++ 编译基本 OpenGL/GLFW 示例 Windows 的文档,所以我决定 post 回答我自己的问题。
- OS: Windows (10)
- 编译器:Cygwin g++ (x86_64-pc-cygwin)
- 代码:GLFW Documentation's Example Code(基本工作示例如下所示。不会创建 window,但如果一切 builds/links 正确,应该输出文本):
#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;
}
- 编译:
g++ -Wall -Iinclude main.cpp -o main.exe -L<folder glfw3.dll is in> -lglfw3 -lopengl32 -lgdi32
问题
- 代码会编译和构建,但不会出现输出 window
- 我当前的链接没问题,但不同的组合会导致
undefined reference
个错误。
此答案是对 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