我一直在尝试在Linux Mint上运行glfw应用程序,并且有一个时间的bear。我肯定我错过了一些明显的东西,但我已经在网上找遍了。我以前在Windows和Visual Studio上使用过glfw。
这是我的惊人代码:
#include <stdio.h>
#include "GLFW/glfw3.h"
int main(){
printf("hello world!n");
if (!glfwInit()){
// Initialization failed
}
glfwTerminate();
return 0;
}
是的,只是想初始化glfw。
我的bash脚本:#!/bin/bash
gcc -Wall -Wextra -g -v -Iinclude -Llib -o morg src/main.c
所以当我运行bash脚本时,我得到这个错误:
/home/[username]/Documents/morg/src/main.c:6: undefined reference to `glfwInit'
/home/[username]/Documents/morg/src/main.c:9: undefined reference to `glfwTerminate'
很好,所以我可能遗漏了一些依赖项。我们来试试。我找到了这个SO页面,并实验性地将bash脚本更改为:
#!/bin/bash
gcc -Wall -Wextra -g -v -Iinclude -Llib -lglfw3 -lGL -o morg src/main.c
我得到一个新的错误/usr/bin/ld: cannot find -lGL
。我查了一下。我发现这是程序员最终有一个破碎的符号链接,他们通过运行sudo apt-get install --reinstall libgl1-mesa-dev
来修复。当然,这对我也不起作用。libGL在我的系统上,我可以在我的文件和其他OpenGL程序中看到它工作正常。
进一步,我得到了关于glfw需要什么依赖的冲突信息。例如,我遇到了g++ Test.cpp -lglfw -lGL -lm -lX11 -lpthread -lXi -lXrandr -ldl
。据我所知,实际的glfw文档并没有提到这些。有人有在GNU Linux上使用glfw的参考、文档、指南或教程吗?我发现这个指南也不出所料地不起作用。
thisthis对其他人来说很难吗?我不是在慢慢失去理智。
为了编译GLFW/OpenGL程序,您需要在新/裸机Linux Mint 20 (Ulyana)安装上执行以下操作列表(刚刚在VMWare Workstation Player 16上使用新Linux Mint 20 ISO安装进行了测试):
更新系统依赖项(只是为了更好地衡量):
sudo apt update && sudo apt upgrade -y
安装必要的依赖项:
sudo apt install -y build-essential
libglfw3
libglfw3-dev
编译(使用-lglfw
并在src/main.c
之后指定链接库):
gcc -Wall -Wextra -g -v -Iinclude -Llib src/main.c -lglfw -lGL -o morg
你犯了两个错误:
- 与
libglfw3
包一起安装的GLFW库在Linux Mint上称为libglfw
,而不是libglfw3
(参见/usr/lib/x86_64-linux-gnu/libglfw.so
) - 任何用于GCC编译的编译单元或归档文件必须在该文件的符号在之前的编译单元或归档文件中被引用之后指定。因此,必须在指定
-lglfw
和-lGL
之前放置src/main.c
。