Ubuntu 无法链接到libglew或libglfw

Ubuntu 无法链接到libglew或libglfw,ubuntu,opengl,linker,glew,Ubuntu,Opengl,Linker,Glew,我正在跟踪一个修改版本的 使用这个简单的源文件: #include <GL/glew.h> int main() { glewInit(); } 正在检查pkg config在后台执行的操作: $ pkg-config --libs glew -lGLEW -lGLU -lGL 它使用的库位于以下位置: $ dpkg-query -L libglew-dev /usr/lib/x86_64-linux-gnu/libGLEW.so 该文件确实存在无法链接的符号: $

我正在跟踪一个修改版本的

使用这个简单的源文件:

#include <GL/glew.h>

int main() {
    glewInit();
}
正在检查pkg config在后台执行的操作:

$ pkg-config --libs glew
-lGLEW -lGLU -lGL
它使用的库位于以下位置:

$ dpkg-query -L libglew-dev
/usr/lib/x86_64-linux-gnu/libGLEW.so
该文件确实存在无法链接的符号:

$ readelf -Ws /usr/lib/x86_64-linux-gnu/libGLEW.so | grep glewInit
1146: 000000000005f2f0 38819 FUNC    GLOBAL DEFAULT   10 glewInit

发生了什么事?为什么链接器找不到那个符号?

对于旧的GNU链接器,命令行上指定的输入顺序很重要。如果在输入对象文件之前或之后指定库,则会有所不同

为你的Makefile试试这个

01: 01.o makefile
    g++ -o $@ $< $(shell pkg-config --libs glew glfw3 glm)

多亏了implcit规则,您根本不必编写实际的命令,只需设置所需的变量。

事实证明,这是一个库顺序-讨厌的命令。我将使用--分组选项,这样就无所谓了,这应该是默认行为……至于隐式规则,这是不会发生的,因为这是一个朋友的学习项目,所以所有内容都需要显式。另外,似乎您已经反转了pkg配置调用。
$ readelf -Ws /usr/lib/x86_64-linux-gnu/libGLEW.so | grep glewInit
1146: 000000000005f2f0 38819 FUNC    GLOBAL DEFAULT   10 glewInit
01: 01.o makefile
    g++ -o $@ $< $(shell pkg-config --libs glew glfw3 glm)
.PHONY: 01
all: 01

01: LDFLAGS += $(shell pkg-config --libs glew glfw3 glm)
01: 01.o

01.o: CFLAGS += $(shell pkg-config --cflags glew glfw3 glm)
01.o: 01.cpp Makefile