我是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.2
和libglfw.so
都存在于目录中。我想了解为什么会这样。预先感谢!
答案 0 :(得分:0)
由于@zxxc的注释,链接-lglfw毕竟是libglfw.so.3.2的符号链接。而且他的猜测是合理的,因为Mac在文件名的末尾带有扩展名(.dylib),而不是Linux中的(.so)文件位于中间。