glfw3错误:DSO缺少命令行

Dav*_*ner 9 c++ linux glfw

我最近不得不在我的电脑上重新安装Linux Mint.我重新安装了我的所有库,例如GLFW,并遇到了我以前从未见过的错误.不幸的是,我的google-fu技能似乎没有达到这个错误的标准,因为我找不到任何适用于我的修复程序.旁注:这些程序在我的旧安装上编译得很好,并且它们也可以在我的笔记本电脑上完全编译,该笔记本电脑也运行Linux Mint 17.2.

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

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
Run Code Online (Sandbox Code Playgroud)

这是终端向我吐出的东西:

/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
Run Code Online (Sandbox Code Playgroud)

所以,如果有人能告诉我为什么我得到这个/或如何修复它将是绝对惊人的!提前感谢您的帮助.

编辑:我已经重新安装Mint两次,以尝试解决这个问题.它每次都会出现.

编辑2:我一直在摆弄,仍然没有找到问题.

Die*_*Epp 15

看起来缺少的符号来自libdl.

作为额外的奖励,我将给你一个Makefile.记得缩进标签,而不是空格,否则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)
Run Code Online (Sandbox Code Playgroud)

但是,如果使用它会更容易pkg-config.我不知道正确的命令(我现在不在Linux上,所以我无法检查),但它看起来像这样:

packages = glfw3
CPPFLAGS := $(shell pkg-config --cflags $(packages))
LIBS := $(shell pkg-config --libs $(packages))
Run Code Online (Sandbox Code Playgroud)

这样你甚至不需要知道你需要-ldl,因为你pkg-config会想出来的.这是做事的标准方式.

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


RSt*_*kin 7

我只是想简化Dietrich Epp对于像我这样经验不足的程序员的答案:

要解决此问题,请通过编译器方法所需的任何方法链接libdl库.如果使用命令行(gcc):将"-ldl"添加到链接命令,以便上面DavidBittner的原始链接命令变为:

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl
Run Code Online (Sandbox Code Playgroud)

注意添加到末尾的"-ldl".

如果您使用的是Cmake,请将"-ldl"添加到其他库的列表中.