glfw3错误:命令行中缺少DSO

glfw3 error: DSO Missing from command line

本文关键字:DSO 命令行 错误 glfw3      更新时间:2023-10-16

我最近不得不在电脑上重新安装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。它每次都会出现。

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

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

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

g++ -std=c++11 main.cpp -o out -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl

注意"-ldl";添加到末尾。

如果您正在使用Cmake,请添加";dl";添加到附加库的列表中。