【发布时间】:2021-09-02 17:06:53
【问题描述】:
我在尝试使用其他库编译我的程序时遇到 undefined reference 错误。我需要使用什么 g++ 命令来编译我的程序?
我正在努力学习opengl,https://learnopengl.com/Getting-started/Creating-a-window。我似乎无法正确添加库 glad 和 glfw。大多数搜索结果显示如何在 Visual Studio 中添加库;但是,我正在尝试了解编译和链接过程,以便我可以使用我选择的文本编辑器。
我在我的 Windows 10 机器上安装了 mingw64 编译器,并且 g++ 工作。我已经下载了库很高兴和 glfw,并将这些库放在了C:\cpp_lib。下面是该位置的文件树。
C:\cpp_lib
├───glad
│ ├───include
│ │ ├───glad
│ │ │ glad.h
│ │ │
│ │ └───KHR
│ │ khrplatform.h
│ │
│ └───src
│ glad.c
│
└───glfw
│ LICENSE.md
│ README.md
│
├───include
│ └───GLFW
│ glfw3.h
│ glfw3native.h
│
├───lib-mingw-w64
│ glfw3.dll
│ libglfw3.a
│ libglfw3dll.a
│
├───lib-static-ucrt
│ glfw3.dll
│ glfw3dll.lib
│
├───lib-vc2012
│ glfw3.dll
│ glfw3.lib
│ glfw3dll.lib
│ glfw3_mt.lib
│
├───lib-vc2013
│ glfw3.dll
│ glfw3.lib
│ glfw3dll.lib
│ glfw3_mt.lib
│
├───lib-vc2015
│ glfw3.dll
│ glfw3.lib
│ glfw3dll.lib
│ glfw3_mt.lib
│
├───lib-vc2017
│ glfw3.dll
│ glfw3.lib
│ glfw3dll.lib
│ glfw3_mt.lib
│
└───lib-vc2019
glfw3.dll
glfw3.lib
glfw3dll.lib
glfw3_mt.lib
我在 C:\learn_opengl\src\main.cpp 有一个 c++ 文件,代码如下:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
return 0;
}
我已经尝试了多个命令,但在调用 glfw 函数时总是出现 undefined reference 错误。
命令:
g++ -Wall -g src\main.cpp -IC:\cpp_lib\glfw\include -IC:\cpp_lib\glad\include -o dist\main.exe
C:\learn_opengl>g++ -Wall -g src\main.cpp -IC:\cpp_lib\glfw\include -IC:\cpp_lib\glad\include -o dist\main.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\david\AppData\Local\Temp\ccvyjawi.o:C:\learn_opengl/src/main.cpp:6: undefined reference to `glfwInit'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\david\AppData\Local\Temp\ccvyjawi.o: in function `main':
C:\learn_opengl/src/main.cpp:7: undefined reference to `glfwWindowHint'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\learn_opengl/src/main.cpp:8: undefined reference to `glfwWindowHint'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\learn_opengl/src/main.cpp:9: undefined reference to `glfwWindowHint'
collect2.exe: error: ld returned 1 exit status
为什么不链接库,我应该使用什么命令/选项?
【问题讨论】:
-
-l<libraryname>和-L<libary location>在哪里? -
@MarekR 库位于 C:\cpp_lib\ 并命名为 glfw 和很高兴。我试过添加
-LC:\cpp_lib\glfw -lglfw -LC:\cpp_lib\glad -lglad,但后来我得到C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglfw C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lglad collect2.exe: error: ld returned 1 exit status -
您添加了错误的文件夹。您的链接器不会在文件夹树中搜索。
-LC:\cpp_lib\glfw应该是-LC:\cpp_lib\glfw\lib-mingw-w64 -
我认为由于某种原因您需要链接到 windows api 库
Gdi32.lib相关:https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-describepixelformat -
@drescherjm 一旦我将glad.c 编译成一个dll 文件,它就可以工作了。感谢您的帮助!