一尘不染

glfw3错误:命令行缺少DSO

linux

最近,我不得不在PC上重新安装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

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

/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

所以,如果有人能告诉我为什么我得到这个/或如何解决它,那绝对是惊人的!提前感谢您的任何帮助。

编辑:我已经两次重新安装Mint,以尝试解决此问题。每次都出现。

编辑2:我一直在摆弄,但仍未发现问题。


阅读 354

收藏
2020-06-07

共1个答案

一尘不染

看起来缺少的符号来自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)

但是,如果使用,会容易得多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

2020-06-07