最近,我不得不在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:我一直在摆弄,但仍未发现问题。
看起来缺少的符号来自libdl。
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上,所以我无法检查),但是它看起来像这样:
pkg-config
packages = glfw3 CPPFLAGS := $(shell pkg-config --cflags $(packages)) LIBS := $(shell pkg-config --libs $(packages))
这样,您甚至不必知道自己需要-ldl,因为pkg-config它将为您解决。这是标准的处理方式。
-ldl
尝试pkg-config --libs glfw3自己运行以查看输出。如果尚未安装,请运行sudo apt-get install pkg- config。
pkg-config --libs glfw3
sudo apt-get install pkg- config