不能 link GLFW 库及其头文件 Ubuntu 18.04
Can't link GLFW library with it's header file on Ubuntu 18.04
我已经使用标准的 sudo apt get 等在 Ubuntu 上安装了 libglfw3-dev:amd64 包。我的以下编译行是:
g++ -o output -IL/usr/lib/x86_64-linux-gnu -lglfw driver.o
我当前的 C++ 文件是:
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
if (!glfwInit())
return -1;
}
我试过使用 glfw 的本地库并设置 -I 和 -L 位置,但似乎没有任何效果。我已经确保 .so 和 .h 文件位于它们各自的位置,但我总是在 运行 make:
时收到此错误
g++ -o output -I/usr/include/GLFW -L/usr/lib/x86_64-linux-gnu -lglfw
driver.o
driver.o: In function `main':
driver.cpp:(.text+0x5): undefined reference to `glfwInit'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'output' failed
make: *** [output] Error 1
我已经尝试查看所有其他 SO 帖子,他们建议使用大量额外的标志进行编译,但我唯一能从中得出的结论是我的库出现了问题,因为 VScode 检测.h 文件。我怎样才能不出错地编译它?
说明书里都有完美的解释https://www.glfw.org/docs/latest/build_guide.html#build_link_pkgconfig
关键问题出在您的 -I/usr/include/GLFW
和 #include <GLFW/glfw3.h>
中,它们共同给出了路径 /usr/include/GLFW/GLFW/glfw3.h
。我想这是通往 glfw3.h
的错误路径。编译成功,因为系统默认包含路径-I/usr/include
.
不要手动调整编译器标志,让 pkg-config
做
给你。
使用静态版本的 GLFW 库时,典型的编译和 link 命令行可能如下所示:
g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --static --libs glfw3`
如果您使用的是 GLFW 库的共享版本,只需省略 --static 标志。
g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --libs glfw3`
您是否尝试过交换链接器参数?即用
编译
g++ -o output driver.o -lglfw
链接器从左到右遍历文件,在处理库之前,它必须知道您需要库中的哪些符号。
我已经使用标准的 sudo apt get 等在 Ubuntu 上安装了 libglfw3-dev:amd64 包。我的以下编译行是:
g++ -o output -IL/usr/lib/x86_64-linux-gnu -lglfw driver.o
我当前的 C++ 文件是:
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
if (!glfwInit())
return -1;
}
我试过使用 glfw 的本地库并设置 -I 和 -L 位置,但似乎没有任何效果。我已经确保 .so 和 .h 文件位于它们各自的位置,但我总是在 运行 make:
时收到此错误g++ -o output -I/usr/include/GLFW -L/usr/lib/x86_64-linux-gnu -lglfw
driver.o
driver.o: In function `main':
driver.cpp:(.text+0x5): undefined reference to `glfwInit'
collect2: error: ld returned 1 exit status
Makefile:2: recipe for target 'output' failed
make: *** [output] Error 1
我已经尝试查看所有其他 SO 帖子,他们建议使用大量额外的标志进行编译,但我唯一能从中得出的结论是我的库出现了问题,因为 VScode 检测.h 文件。我怎样才能不出错地编译它?
说明书里都有完美的解释https://www.glfw.org/docs/latest/build_guide.html#build_link_pkgconfig
关键问题出在您的 -I/usr/include/GLFW
和 #include <GLFW/glfw3.h>
中,它们共同给出了路径 /usr/include/GLFW/GLFW/glfw3.h
。我想这是通往 glfw3.h
的错误路径。编译成功,因为系统默认包含路径-I/usr/include
.
不要手动调整编译器标志,让 pkg-config
做
给你。
使用静态版本的 GLFW 库时,典型的编译和 link 命令行可能如下所示:
g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --static --libs glfw3`
如果您使用的是 GLFW 库的共享版本,只需省略 --static 标志。
g++ -o output `pkg-config --cflags glfw3` yourprog.c `pkg-config --libs glfw3`
您是否尝试过交换链接器参数?即用
编译g++ -o output driver.o -lglfw
链接器从左到右遍历文件,在处理库之前,它必须知道您需要库中的哪些符号。