【问题标题】:Why can't g++ cannot find the glfw3 library correctly in Ubuntu?为什么 g++ 无法在 Ubuntu 中正确找到 glfw3 库?
【发布时间】:2018-09-30 15:58:15
【问题描述】:

我是 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 种类型,所以我想使用最新的(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 都存在于目录中。我想了解为什么会这样。提前致谢!

【问题讨论】:

  • 我的猜测是使用-lglfw3.2 将尝试将其与libglfw3.2.so 链接而不是libglfw.so.3.2。即使您可以使用该特定版本进行链接(可以直接传递.so 文件进行链接,理想情况下是静态的),但最好使用-lglfw。这将使用libglfw.so,我假设它是指向libglfw.so.3 的符号链接,它是指向libglfw.so.3.2 的符号链接。您可以通过ls -la /usr/lib/x86_64-linux-gnu/libglfw.so* 查看链接。您可以使用ldd glad 查看.so 依赖项。
  • @zxxc 你是对的!这是一个符号链接。我不知道符号链接是什么,但现在我知道了,多亏了你。很高兴我可以简单地绑定 -lglfw。而且我认为您的猜测是正确的,因为在 Mac 中,库文件名是 libglfw.3.2.dylib 而不是 libglfw.dylib.3.2。还是谢谢!

标签: ubuntu makefile g++ glfw


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2021-04-14
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多