【发布时间】:2012-10-04 21:28:34
【问题描述】:
我正在尝试使用 GLFW 学习 OpenGL,但遇到了一些问题。
这是我的 main.cpp:
#include <GL/glfw.h>
int main()
{
glfwInit();
glfwSleep( 1.0 );
glfwTerminate();
}
这是我项目的文件夹结构:
Project
+- glfw.dll
+- main.cpp
这是我提取 GLFW 文件的地方:
MinGW
+- include
| +- GL
| +- glfw.h
+- lib
+- libglfw.a
+- libglfwdll.a
这就是我尝试构建程序的方式:
g++ main.cpp -o main.exe -lglfwdll
这些是我得到的错误:
C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0xf): undefined reference to `_glfwInit'
C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0x25): undefined reference to `_glfwSleep'
C:\Users\Dark\AppData\Local\Temp\cc0ZgTVp.o:main.cpp:(.text+0x2a): undefined reference to `_glfwTerminate'
collect2.exe: error: ld returned 1 exit status
我错过了什么吗?
【问题讨论】:
-
使用大 L 选项来指定库所在的路径,像这样
g++ ... -L /path/to/lib还记得 MinGW 使用与 Visual Studio 不同的 ABI 集,因此请确保您使用的所有库using for MinGW 是为 MinGW 编译的。 -
我已经为 -L 尝试了很多文件夹,包括 glfw.dll 所在的
D:\Dropbox\C++\Untitled,但没有成功,我下载的 .zip 文件有一个单独的lib-mingw文件夹,所以我认为这些是正确的库。 -
codeblocks 在 Windows 下使用 MinGW,所以我想你可以通过阅读这个 stackoverflow.com/questions/7856648/glfw-and-codeblocks 来解决你的问题
-
除了第 6 步:“现在在代码中创建 GLFW 项目时,我已经完成了所有操作:::blocks 为 glfw 位置提供路径 C:\Program Files\CodeBlocks\MinGW” " 因为那是 Code::Blocks 特定的步骤。
-
g++ -print-search-dirs此命令将打印 g++ 考虑的所有路径,如果库不在此处,则需要使用-L选项添加它。可能还有其他问题,但我目前没有在 Windows 上编程,而且我已经几天和几个月没有接触 Windows,但是你可以得到非常讨厌的行为,比如来自 UAC 或不同 ABI 标准的用户限制。如果你想解决这个问题,只需使用 Codeblocks,你将使用与现在相同的 MinGW,至少,你得到了支持。大多数这些问题只是由 Windows 操作系统引起的,而不是由 MinGW 本身引起的。