【发布时间】:2021-11-01 19:01:56
【问题描述】:
我正在尝试使用g++在命令行上编译一个 c++ 文件
我有这个文件
#include <iostream>
#include "C:\Users\Shaurya\Documents\Opengl\Dependencies\GLFW\include\GLFW\glfw3.h"
using namespace std;
int main(){
GLFWwindow* window;
if(!glfwInit()){
cout << "Window not initialized";
return -1;
}
window = glfwCreateWindow(600,600,"OpenGL", NULL, NULL);
if(!window){
cout << "Window Not created";
glfwTerminate();
}
glfwMakeContextCurrent(window);
while(glfwWindowShouldClose(window)){
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
我运行这个命令 g++ -o Test main.cpp -L <fullpath>\Dependencies\GLFW\lib-vc2019 -lglfw3.lib
但这会引发巨大的错误
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: mode i386pe
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../crt2.o
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtbegin.o
C:\Users\Shaurya\AppData\Local\Temp\ccxDP2Km.o
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/libstdc++.dll.a)d004332.o
.
.
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/libgcc_s.a)d000122.o
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/libgcc.a)_chkstk_ms.o
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/libgcc.a)_ctors.o
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmingwex.a)fesetenv.o
.
.
.
(c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../libmoldname.a)dagwbt.o
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/crtend.o
c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lglfw3.lib
collect2.exe: error: ld returned 1 exit status
我花了很多时间才意识到 -l 只是在寻找 .o 文件
那么我如何链接 .lib 文件?我从glfw.org 二进制文件。
我不想使用 Visual Studio 2019 来执行此操作,因为我的笔记本电脑很难运行它。
【问题讨论】:
-
删除
.lib扩展,只使用-lglfw3作为选项。如果库安装在标准路径(或添加了-L的路径)中(对于 GCC 和 MinGW),则应该可以找到它。 -
@Gal 几天前我在 Visual Studio 中使用相同的文件并且它们正在工作
-
Visual Studio 使用与 GCC 不同的链接器。它们使用不同的库格式。
-
然后你需要找到为MinGW构建的文件,并“安装”它。 MinGW 包管理器可能应该将它放在它的存储库中。
-
如果您切换到使用 msys2 及其更新的 mingw 和包管理,您的任务会更轻松。 msys2.org glfw 是一个包:https://packages.msys2.org/package/mingw-w64-x86_64-glfw,64 位版本可以从 msys2 shell 使用此命令安装:
pacman -S mingw-w64-x86_64-glfw