为什么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.2
和 libglfw.so
都存在于目录中。我想了解为什么会这样。提前致谢!
感谢@zxxc 的评论,毕竟链接 -lglfw 是指向 libglfw.so.3.2 的符号链接。他的猜测是合理的,因为 Mac 在文件名的末尾有扩展名 (.dylib),而不是像 Linux.
中的 (.so) 文件那样在中间
我是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
中尝试使用的 makefileLINK_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.2
和 libglfw.so
都存在于目录中。我想了解为什么会这样。提前致谢!
感谢@zxxc 的评论,毕竟链接 -lglfw 是指向 libglfw.so.3.2 的符号链接。他的猜测是合理的,因为 Mac 在文件名的末尾有扩展名 (.dylib),而不是像 Linux.
中的 (.so) 文件那样在中间