C++ glfw3错误:命令行中缺少DSO

C++ glfw3错误:命令行中缺少DSO,c++,linux,glfw,C++,Linux,Glfw,我最近不得不在我的电脑上重新安装LinuxMint。我重新安装了我所有的库,比如GLFW,遇到了一个我以前从未见过的错误。不幸的是,我的谷歌FU技能似乎并没有达到这个错误的标准,因为我找不到任何适合我的修复方法。旁注:这些程序在我的旧安装上编译得很好,在我的笔记本电脑上也运行LinuxMint17.2,它们也编译得很好 这是我用来编译的编译语句: g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr

我最近不得不在我的电脑上重新安装LinuxMint。我重新安装了我所有的库,比如GLFW,遇到了一个我以前从未见过的错误。不幸的是,我的谷歌FU技能似乎并没有达到这个错误的标准,因为我找不到任何适合我的修复方法。旁注:这些程序在我的旧安装上编译得很好,在我的笔记本电脑上也运行LinuxMint17.2,它们也编译得很好

这是我用来编译的编译语句:

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
这就是终端向我吐出的东西:

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libdl.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
所以,如果有人能告诉我为什么我会得到这个/或如何修复它,那将是绝对惊人的!提前感谢您的帮助

编辑: 我已经重新安装了薄荷两次,以试图解决这个问题。它每次都会出现

编辑2:
我一直在瞎忙,还没有找到问题。

看起来缺少的符号来自
libdl

作为额外的奖励,我将给你一个Makefile。记住使用制表符缩进,而不是空格,否则生成文件将无法工作

all: out
clean:
        rm -f out *.o
.PHONY: all clean

CXX = g++
CPPFLAGS =
CXXFLAGS = -std=c++11 -Wall -Wextra -g
LIBS = -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -pthread -lXi -ldl
LDFLAGS =

out: main.o
        $(CXX) $(LDFLAGS) -o $@ $^ $(LIBS)
但是,如果使用
pkg-config
,则会容易得多。我头脑中不知道正确的命令(我现在不在Linux上,所以无法检查),但它看起来是这样的:

packages = glfw3
CPPFLAGS := $(shell pkg-config --cflags $(packages))
LIBS := $(shell pkg-config --libs $(packages))
这样,您甚至不必知道您需要
-ldl
,因为
pkg config
会为您解决问题。这是做事的标准方式


尝试自己运行
pkg config--libs glfw3
以查看输出。如果未安装,请运行
sudo apt get install pkg config

我只想为像我这样经验较少的程序员简化Dietrich Epp的答案:

要解决此问题,请通过编译器方法所需的任何方式链接libdl库。如果使用命令行(gcc):将“-ldl”添加到链接命令中,使上面来自DavidBitner的原始链接命令变为:

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl
注意末尾添加的“-ldl”

如果您使用的是Cmake,请将“-ldl”添加到附加LIB列表中