如何将 GLEW 和 GLFW 以及 OpenGL 链接到 MingW 的 g++
Posted
技术标签:
【中文标题】如何将 GLEW 和 GLFW 以及 OpenGL 链接到 MingW 的 g++【英文标题】:How to link GLEW and GLFW and OpenGL to MingW's g++ 【发布时间】:2020-05-09 14:48:22 【问题描述】:我正在上 OpenGL 课程。
所以我已经在 Visual Studio 2019 中运行了我的项目并且它可以工作。
我需要在 Visual Studio 中做的是:
-
添加 GLEW 和 GLFW 的附加 include 目录。 (当您下载库时,它只是包含文件的位置)
添加 GLEW 和 GLFW 的附加 library 目录。 (lib 文件夹位置)
添加额外的依赖项。 (opengl32.lib、glew32.lib、glfw3.lib)
复制并将 GLEW.dll 粘贴到项目文件中,在 main.cpp 旁边。
然后我运行我的代码并且它可以工作。
但我不想使用 Visual Studio 2019,我更愿意在 Notepad++ 或 VSCode 中工作,我真正想要的只是用 纯 记事本制作一个项目并使用新的 Windows 终端。
我的问题: 如何通过 Power Shell 完成我在 Visual Studio 2019 中所做的所有事情?
我听说 MingW 带有自己的 power shell 或命令提示符,我想在开始编码之前我需要找到它并给它一些命令来链接所有内容。
我在哪里可以找到 MingW 的 power shell 等价物以及我需要输入哪些命令?
我已经被这个问题困扰了很久,在网上找不到任何关于它的信息。 (除了 -L 和 -l 的作用,但这些不是 power shell 命令)
【问题讨论】:
请注意,当您切换到 mingw 时,您可能需要为您的第三方库获取 mingw 二进制文件。 有这个:http://www.mingw.org/wiki/MSYS 好吧,我确信我不需要下载任何额外的东西来使用库。那会很奇怪。 不,但您可能需要不同的二进制文件,因为c++
编译器是二进制不兼容的。 Visual Studio 2015 到 2019 相互兼容,但没有其他版本的 Visual Studio 或任何其他编译器,当它处于特殊兼容模式时会出现 clang。
这就是我所说的:https://docs.microsoft.com/en-us/cpp/porting/binary-compat-2015-2017?view=vs-2019
【参考方案1】:
MingGW 和 mingw-w64 编译器是 Windows 命令行工具。它们是(某些)的 Windows 端口 GCC 编译器。 tdm-gcc 是另一种选择。
用于任何操作的命令工具 系统不需要自己的外壳。你可以在你拥有的任何 shell 中运行它们 在那个操作系统上。今天在 Windows 上 您至少可以选择 PowerShell 和旧的 CMD shell。
MinGW 项目及其 GCC 工具链提供了一个最小的类 unix Windows 环境称为 MSYS,其中包括一个 shell。 你不需要 MSYS 运行编译器。
只要 GCC 工具可以位于
PATH
环境变量的值
编译时的 shell,然后在 shell 提示符下运行编译器:
>gcc [options...]
>g++ [options...]
在任何操作系统上运行的方式相同。如果您想使用 GCC 工具链,那么问题是:
如何通过 Power Shell 完成我在 Visual Studio 2019 中所做的所有事情?
只是一个问题,你如何运行 GCC? 笼统的概括。你需要学习相关books 和documentation
非常粗略,如果您想编译和链接具有源文件main.cpp
和other.cpp
并依赖于库的 C++ 程序
foo
和 bar
在头文件中定义其 C++ API 并在 DLL 中实现,
您将使用以下形式的命令来执行此操作:
将源文件编译为目标文件:
>g++ -c -o main.obj main.cpp -I/path/to/foo/header/files -I/path/to/bar/header/files [any other compilation options....]
>g++ -c -o other.obj other.cpp -I/path/to/foo/header/files -I/path/to/bar/header/files [any other compilation options....]
链接目标文件和库以制作可执行程序:
>g++ -o prog main.obj other.obj -L/path/to/foo_dll -L/maybe/a/different/path/to/bar_dll -lfoo -lbar [any other linkage options...]
如果一切顺利,那么程序将是prog.exe
,你可以运行它:
>prog
就像你运行g++
一样,前提是the OS loader's DLL search protocol可以在运行时找到foo.dll
和bar.dll
正如我认为你所理解的那样,在现实生活中,没有人通过键入所有 shell 中的命令,教学目的除外。他们使用构建系统或 IDE 来自动化它。但是,如果您基本了解其背后的工具是如何工作的,那么通过构建系统或 IDE 构建程序确实会遇到更少的困难。
【讨论】:
天哪,太棒了!我会将您的链接添加到我必须阅读的内容中,稍后再阅读,看起来这正是我想要的。 为了解释一些混乱,在 MSYS2 中有一个叫做“MinGW-w64 Win64 shell”或“MINGW64 shell”的东西。这意味着在环境中预定义 MSYSTEM=MINGW64 启动的 shell 会话,以便使用 x86_64-w64-mingw32 工具链为本地编译设置一切。 (类似 32 位。) 我终于启动并运行了我的项目,我花了很长时间才弄清楚最终编译我的项目需要做的所有事情。除了弄清楚编译器命令之外,我还需要下载 CMake 和 Make,而且我还需要为 glfw3 添加 -lgdi32...一个依赖于另一个库的库... 0_0之前我想应该可以编译的时候,我以为我永远编译不了其他库的,但是我终于到了,谢谢大家的支持。以上是关于如何将 GLEW 和 GLFW 以及 OpenGL 链接到 MingW 的 g++的主要内容,如果未能解决你的问题,请参考以下文章