2015-11-17 13 views
5

Recentemente ho dovuto reinstallare Linux Mint sul mio PC. Ho reinstallato tutte le mie librerie, come GLFW e ho trovato un errore che non avevo mai visto prima. Sfortunatamente le mie competenze di google-fu non sembrano all'altezza di questo errore perché non sono stato in grado di trovare alcuna correzione che funzioni per me. Sidenote: questi programmi sono stati compilati bene sulla mia vecchia installazione, e compilano perfettamente perfettamente anche sul mio laptop che esegue anche Linux Mint 17.2.Errore glfw3: DSO mancante dalla riga di comando

Questa è la dichiarazione di compilazione I usando per compilare:

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

Questo è ciò che il terminale sputa fuori di me:

/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 

Quindi, se qualcuno mi può dire perché mi sto questo/o come risolverlo sarebbe assolutamente incredibile! Grazie in anticipo per qualsiasi aiuto.

MODIFICA: Ho reinstallato Mint due volte per provare a risolvere il problema. Si presenta ogni volta.

MODIFICA 2: Ho continuato a trafficare e devo ancora trovare un problema.

risposta

11

Sembra che il simbolo mancante sia libdl.

Come bonus aggiuntivo, ho intenzione di darvi un Makefile. Ricorda di indentare con tabulazioni, NON spazi, altrimenti il ​​Makefile non funzionerà.

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) 

Tuttavia, sarebbe molto più semplice se si utilizza pkg-config. Non so fuori dalla parte superiore della mia testa il comando a destra (io non sono su Linux ora quindi non posso controllare), ma sarà simile a questa:

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

In questo modo non sarà devi sapere che hai bisogno di -ldl, perché lo pkg-config lo capirà. Questo è il modo standard di fare le cose.

Prova a eseguire pkg-config --libs glfw3 per te stesso per vedere l'output. Se non è installato, esegui sudo apt-get install pkg-config.

+0

Giusto. Grazie mille amico. Ci proverò tra un'ora quando torno a casa. Io uso un makefile, stavo solo ricevendo lo stesso problema. Grazie per la risposta, la contrassegnerò come risposta se funziona! – DavidBittner

+0

Questo ha funzionato per me. Grazie mille, amico! La cosa più utile è che hai detto "libDL" a differenza di tante altre risposte che ho trovato online. Sapendo che era una vera e propria lib e non solo "uh aggiungi -ldl alla tua linea di comando gcc" era fondamentale. – rsethc

+1

Grazie mille, questo ha funzionato anche per me! – SRG

4

Voglio solo di semplificare la risposta di Dietrich Epp per i programmatori meno esperti come me:

Per risolvere questo problema, collegare la libreria libdl con ogni mezzo richiesto dal vostro metodo di compilatore. Se si utilizza la riga di comando (GCC): aggiungere "-ldl" per i comandi che collegano in modo che il comando originale collegamento da DavidBittner diventa sopra:

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

Annotare il "-ldl" aggiunto alla fine.

Se si utilizza Cmake, aggiungere "-ldl" all'elenco di librerie aggiuntive.

+0

Grazie mille amico mio! –

+0

Grazie mille per il tuo aiuto! – SRG