是否可以在 Cygwin 下编译和运行 OpenGL 程序?如果是,如何?
4 回答
可以在 Cygwin 下编译和运行 OpenGL 程序。我在这里说明基本步骤:
我假设你知道 OpenGL 编程。如果没有,请获取红皮书(The OpenGL Programming Guide)。无论如何,它是 OpenGL 的必读。
我假设你已经安装了 Cygwin。如果没有,请访问cygwin.com并安装它。
要编译和运行 OpenGL 程序,您需要名为opengl的 Cygwin 包。在 Cygwin 安装程序中,可以在图形部分下找到它。请安装此软件包。
编写一个简单的 OpenGL 程序,比如ogl.c。
使用标志-lglut32 -lglu32 -lopengl32编译程序。(这会将您的程序与 GLUT、GLU 和 OpenGL 库链接起来。OpenGL 程序通常可能会使用这三个库中的所有函数。)例如:
$ gcc ogl.c -lglut32 -lglu32 -lopengl32
运行程序。就这么简单!
如果上述方法不起作用(并且对我不起作用),请尝试以下方法(确实如此!)
gcc ogl.c -lglut -lglu -lgl
我记得几年前做过一次并取得了一些成功,基本上是在尝试交叉编译一个小型 Linux OpenGL C++ 程序。我确实记得 Windows OpenGL 驱动程序落后于时代的问题(由于 MS 专注于 DirectX)。我在我的 Windows 系统上安装了 NVidia OpenGL 和 DirectX 驱动程序,但 cygwin/g++ 似乎只想使用多年前的 Microsoft OpenGL DLL,它们没有对所有 ARB 扩展的最新支持,如着色器程序等.YMMV。
我通常不会发布这么长的答案,但这是值得的。
我将为Cygwin提供一个Windows 10 64 位设置,它使用与Visual Studio相同的库。您将能够使用相同的代码(相同的包含和库)使用两个开发环境,因此您可以根据需要在两者之间切换。
您需要三个库:OpenGL、GLEW和GLFW。
- OpenGL
Visual Studio:以下默认位置适用于当前版本的 Windows 10 和 Visual Studio 2019。
OpenGL静态库:
C:\Program Files(x86)\Microsoft Visual Studio\2019\Community\SDK\ScopeCPPSDK\vc15\lib\SDK\lib\opengl32.lib
OpenGL DLL:
C:\Windows\SysWOW64\opengl32.dll
该opengl32.lib
库需要在 VS 项目下指定Properties -> Configuration Properties -> Linker -> Input -> Additional Dependencies
。这同样适用于 Visual Studio 下的所有其他动态库。我不会再提了。
赛格温:
OpenGL静态库默认位置:
/lib/w32api/libopengl32.a
OpenGL 动态库(使用 Windows DLL):
C:\Windows\SysWOW64\opengl32.dll
- GLEW
Visual Studio:从自定义文件夹下载 32 位/64 位二进制文件http://glew.sourceforge.net/
并安装在自定义文件夹中,例如C:\OpenGL\glew-2.1.0
. 相同的下载适用于 Visual Studio 和 Cygwin。
GLEW 标头(到#include GL/glew.h
):
C:\OpenGL\glew-2.1.0\include
GLEW 静态库:
C:\OpenGL\glew-2.1.0\lib\Release\x64\glew32.lib
GLEW DLL:
C:\OpenGL\glew-2.1.0\bin\Release\x64\glew32.dll
这些可以在你的 VS 项目的属性菜单中指定。
Cygwin:您可以按原样从 Cygwin 链接到此库,这意味着您可以为您的 、 和变量指定其下载目录,INCS
如下LIBS
所示LDLIBS
(Makefile
与上面指定的下载目录一致):
GLEW 头文件目录:
/cygdrive/c/OpenGL/glew-2.1.0/include
GLEW 静态库目录:
/cygdrive/c/OpenGL/glew-2.1.0/lib/Release/x64
GLEW动态库目录:
/cygdrive/c/OpenGL/glew-2.1.0/bin/Release/x64
分别使用、 和的这些值INCS
,然后您可以使用 UNIX 命名约定进行链接,如文章底部完整的 、 所示。LIBS
LDLIBS
Makefile
- GLFW
这可以在 下载https://www.glfw.org/download
。对于我们的 64 位设置,您需要 Windows 64 位预编译二进制文件。您也可以将其放在自定义文件夹中,例如C:\OpenGL\glfw-3.3.4.bin.WIN64
. 相同的下载适用于 VS 和 Cygwin。
Visual Studio:
您可以将下载位置直接指定到项目属性中,#include GLFW/glfw3.h
分别用于标头(在源代码中)和 DLL(让 VS 链接到这些库)。
Cygwin: 对于 Cygwin,GLFW 比较棘手,因为您不能再直接从下载位置链接到它。你需要:
(a) 从下载位置复制标题、静态和动态库:
C:\OpenGL\glfw-3.3.4.bin.WIN64\include\GLFW\*.h
C:\OpenGL\glfw-3.3.4.bin.WIN64\lib-mingw-w64\*.a
C:\OpenGL\glfw-3.3.4.bin.WIN64\lib-mingw-w64\*.dll
...进入您的工具链(MinGW)各自的位置:
GLFW 标头(创建include
目录):
/usr/x86_64-w64-mingw32/include/GLFW/*.h
GLFW 静态库:
/usr/x86_64-w64-mingw32/lib/*.a
GLFW 动态库:
/usr/x86_64-w64-mingw32/bin/*.dll
(b) 将动态库位置放入您的 PATH 环境变量中,可在您.bash_profile
的主目录中的文件中进行编辑。
Makefile
Cygwin 是:
CC=/usr/bin/x86_64-w64-mingw32-c++.exe
OPTS=-std=c++11
DEBUG=-g
CFLAGS=-Wall -c ${DEBUG}
INCS= -I.\
-I/cygdrive/c/OpenGL/glew-2.1.0/include\
-I/cygdrive/c/cygwin64/usr/x86_64-w64-mingw32
LIBS= -L/usr/lib\
-L/cygdrive/c/OpenGL/glew-2.1.0/lib/Release/x64\
-L/cygdrive/c/cygwin64/usr/x86_64-w64-mingw32/lib
LDLIBS= -L/bin\
-L/cygdrive/c/OpenGL/glew-2.1.0/bin/Release/x64\
-L/cygdrive/c/cygwin64/usr/x86_64-w64-mingw32\bin
Program.o: Program.cpp
${CC} ${OPTS} ${INCS} -c $<
Program: Program.o
${CC} ${OPTS} ${LIBS} ${LDLIBS} Program.o -lopengl32 -lglew32 -lglew32.dll -lglfw3 -lgdi32 -luser32 -o Program
通过此设置,您可以在 VS 和 Cygwin 中使用完全相同的源代码文件。Program.exe
您可以使用以下命令从 Cygwin 中的目录编译、链接和运行:
$ make Program
$ ./Program.exe
*.exe
您可以通过将现有项目作为 SLN 项目打开并使用 IDE 界面运行它来从 VS 运行 Cygwin 编译的程序。相反,您可以使用上面的命令直接从 Cygwin 命令行运行 VS 可执行文件(由 VS 在Project/Debug
或中创建)。Project/Release
包括:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
无需对源代码进行任何更改即可在黑白 VS 和 Cygwin 之间来回切换。快乐编码:-)