2015-11-17 4 views
5

Ich musste Linux Mint neu auf meinem PC neu installieren. Ich habe alle meine Bibliotheken wie GLFW neu installiert und bin auf einen Fehler gestoßen, den ich noch nie zuvor gesehen habe. Leider scheinen meine google-fu-Fähigkeiten für diesen Fehler nicht angemessen zu sein, da ich keine Fixes gefunden habe, die für mich funktionieren. Randnotiz: Diese Programme kompiliert gut auf meiner alten Installation, und sie kompilieren auch perfekt auf meinem Laptop, der auch Linux Mint 17.2 läuft.GLFW3 Fehler: DSO fehlt von der Befehlszeile

Dies ist die Kompilierung Aussage, die ich kompilieren mit:

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

Dies ist, was das Terminal spuckt mich aus:

/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol '[email protected]@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 

Also, wenn jemand mir, warum sagen kann, ich bin immer dies/oder wie man es repariert, das wäre absolut erstaunlich! Vielen Dank für die Hilfe.

EDIT: Ich habe Mint zweimal neu installiert, um zu versuchen, dies zu beheben. Es taucht immer auf.

EDIT 2: Ich habe herumgetüftelt und muss immer noch ein Problem finden.

Antwort

11

Es sieht so aus, als ob das fehlende Symbol von libdl stammt.

Als zusätzlichen Bonus gebe ich Ihnen ein Makefile. Denken Sie daran, mit Tabulatoren einzurücken, NICHT mit Leerzeichen, sonst funktioniert das Makefile nicht.

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 [email protected] $^ $(LIBS) 

Allerdings wäre es viel einfacher sein, wenn Sie pkg-config verwendet. Ich habe nicht die Spitze von meinem Kopf des richtige Befehl weiß aus (ich bin auf Linux nicht jetzt, so kann ich nicht überprüfen), aber es wird wie folgt aussehen:

packages = glfw3 
CPPFLAGS := $(shell pkg-config --cflags $(packages)) 
LIBS := $(shell pkg-config --libs $(packages)) 

Auf diese Weise werden Sie nicht muss wissen, dass Sie -ldl brauchen, weil pkg-config es für Sie herausfinden wird. Dies ist die übliche Vorgehensweise.

Versuchen Sie, pkg-config --libs glfw3 laufen zu lassen, um die Ausgabe zu sehen. Wenn es nicht installiert ist, führen Sie sudo apt-get install pkg-config.

+0

Richtig. Vielen Dank Alter. Ich werde es in einer Stunde versuchen, wenn ich nach Hause komme. Ich benutze ein Makefile, ich habe nur das gleiche Problem bekommen. Danke für die Antwort, ich werde es als die Antwort markieren, wenn es funktioniert! – DavidBittner

+0

Das hat bei mir funktioniert. Vielen Dank Alter! Am hilfreichsten war, dass Sie "libDL" sagten, im Gegensatz zu vielen anderen Antworten, die ich online gefunden habe. Zu wissen, dass es eine tatsächliche lib war und nicht nur "uh add -ldl zu deiner gcc-Befehlszeile" war entscheidend. – rsethc

+1

Vielen Dank, das hat auch für mich funktioniert! – SRG

4

Ich will nur Dietrich Epp Antwort für die weniger erfahrenen Programmierer wie ich vereinfachen:

Um dieses Problem zu lösen, verbinden die libdl-Bibliothek mit dem, was auch immer von Ihrem Compiler Verfahren erforderlichen Mitteln. Wenn über die Befehlszeile (GCC): add „-ldl“ an die Verknüpfungsbefehle, so dass der ursprüngliche Verknüpfungsbefehl von DavidBittner oben wird:

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

Notierte die „-ldl“ hinzugefügt, bis zum Ende.

Wenn Sie Cmake verwenden, fügen Sie "-ldl" zur Liste der zusätzlichen Bibliotheken hinzu.

+0

Vielen Dank mein Freund! –

+0

Vielen Dank für Ihre Hilfe! – SRG