为什么g++不能在Ubuntu中正确找到glfw3库?

Why can't g++ cannot find the glfw3 library correctly in Ubuntu?

我是Ubuntu的新手,直到现在我一直在Mac用glfw3编程。问题如下。在我用

下载 glfw3 包之后
sudo aptitude install libglfw3 libglfw3-dev

在 Ubuntu,我检查了 glfw3 库的位置。我在网上搜索了一下,发现 dpkg --listfiles packagename returns 与我安装的软件包相关的所有文件的路径。 dpkg --listfiles libglfw3 的结果是这样的。 (我将只显示 .so 文件的路径)

/usr/lib/x86_64-linux-gnu/libglfw.so.3.2
/usr/lib/x86_64-linux-gnu/libglfw.so.3

dpkg --listfiles libglfw3-dev的结果是这样的

/usr/lib/x86_64-linux-gnu/libglfw.so

有 3 种类型的 .so 文件,所以我想使用最新的 (3.2),使用 3.2 版本的 makefile 在 Mac 中运行良好。这是我在 Ubuntu

中尝试使用的 makefile
LINK_TARGET = Animation

OBJS = glad.o Animation.o

REBUILDABLES = $(OBJS) $(LINK_TARGET)

INCLUDES = -I/usr/include

all : $(LINK_TARGET)
    echo All successfully linked!

$(LINK_TARGET) : $(OBJS)
    g++ -o $@ $^ -L/usr/lib/x86_64-linux-gnu -ldl -lglfw.3.2

Animation.o : Animation.cpp
    g++ -c Animation.cpp $(INCLUDES)

glad.o : glad.c
    g++ -c glad.c $(INCLUDES)

clean :
    rm -f $(REBUILDABLES)
    echo Clean done!

如果我们关注行

$(LINK_TARGET) : $(OBJS)
    g++ -o $@ $^ -L/usr/lib/x86_64-linux-gnu -ldl -lglfw.3.2

-lglfw.3.2 选项曾经在 Mac 中工作得很好(Mac 曾经是 .dylib 文件而不是 .so 文件。-ldl 标志也Mac 中也不需要)。现在,如果 makefile 是 运行.

,它会打印错误消息 /usr/bin/ld: cannot find -lglfw3.2

不过,如果我将选项 -lglfw3.2 更改为 -lglfw,makefile 会成功运行,但我不明白为什么。 libglfw.so.3.2libglfw.so 都存在于目录中。我想了解为什么会这样。提前致谢!

感谢@zxxc 的评论,毕竟链接 -lglfw 是指向 libglfw.so.3.2 的符号链接。他的猜测是合理的,因为 Mac 在文件名的末尾有扩展名 (.dylib),而不是像 Linux.

中的 (.so) 文件那样在中间