为什么g ++无法在Ubuntu中正确找到glfw3库?

时间:2018-09-30 15:58:16

标签: ubuntu makefile g++ glfw

我是Ubuntu的新手,到目前为止,我一直在Mac中使用glfw3进行编程。问题如下。用以下命令下载glfw3软件包后:

sudo aptitude install libglfw3 libglfw3-dev

在Ubuntu上,我检查了glfw3库的位置。我在网上搜索了一下,发现dpkg --listfiles packagename返回了与我安装的软件包相关的所有文件的路径。 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

.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文件。在Mac中也不需要-ldl标志)。现在,如果生成文件已运行,它将显示错误消息/usr/bin/ld: cannot find -lglfw3.2

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

1 个答案:

答案 0 :(得分:0)

由于@zxxc的注释,链接-lglfw毕竟是libglfw.so.3.2的符号链接。而且他的猜测是合理的,因为Mac在文件名的末尾带有扩展名(.dylib),而不是Linux中的(.so)文件位于中间。