无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
Can't link GLFW library with it's header file on Ubuntu 18.04
我已经使用标准的sudo apt-get等在Ubuntu上安装了libglfw3 dev:aamd64包。我的编译行如下:
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文件,我的库出现了问题。如何在没有任何错误的情况下编译此文件?
您是否尝试过交换链接器参数?也就是说,使用进行编译
g++ -o output driver.o -lglfw
链接器从左到右遍历文件,在处理库之前,它必须知道需要库中的哪些符号。
所有内容都在手册中得到了完美的解释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库时,典型的编译和链接命令行可能如下所示:
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`
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 错误 VSP1011:无法获取调试信息.与 /配置文件链接器开关链接
- 将我的主输出库与测试可执行文件链接时出现问题
- CMake + Qt + GTest 文件链接
- 生成文件链接
- 使用LTO静态链接的可执行文件(链接时间优化):如何使用以前构建的库进行制作
- 生成文件链接错误
- 使用 c++ 生成文件的文件链接
- 生成文件:链接器错误
- 反转头文件/链接
- C++实现和头文件链接
- .cpp文件将不会与.h文件链接
- 将问题与多个文件链接在一起
- 编译三个C++文件.链接错误
- C++如何将我的主类与我的头文件链接起来
- 使文件链接问题 架构x86_64的未定义符号
- c++和mex文件链接错误
- 使用堆叠类生成文件链接问题
- 使用对象文件链接c++中的东西