Hoffentlich hilft dies jenen wie mir, die neu in Linux sind und nichts, was mit Linux zu tun hat, besonders offensichtlich finden.
Wie von talonmies angemerkt, kann ich nicht indirekt verlinken und muss daher alle zusätzlichen Bibliotheken angeben, die von den von mir verwendeten Bibliotheken benötigt werden. Das heißt, wenn ich Bibliothek A verlinke, was die Bibliotheken B und C erfordert, muss ich alle drei Bibliotheken verlinken, damit das Programm korrekt verlinkt.
Um herauszufinden, welche anderen Bibliotheken benötigt wurden, habe ich den pkg-config
verwendet Befehl, für den ich hier eine Anleitung gefunden habe. Ausführen von pkg-config --print-requires --print-requires-private glfw3
gab die folgende Ausgabe, die die Liste der von glfw3 benötigten Pakete ist.
x11
xrandr
xi
xxf86vm
gl
Ich konnte dann herausfinden, welche Bibliotheken ich einbinden musste, indem ich pkg-config --libs
ausführte , gefolgt vom Namen der Bibliothek. Beispiel:pkg-config --libs x11
ergab -lX11
.
Hinweis:Sie können mehrere Elemente an pkg-config
übergeben als Eingabe, also läuft
pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)
druckt alle zusätzlichen Bibliotheken, die Sie verknüpfen müssen (-lX11 -lXrandr -lXi -lXxf86vm -lGL
).
Mein Programm wird jetzt erfolgreich verknüpft, ich hoffe, dies ist für alle hilfreich, die ein ähnliches Problem haben.
Ihr Linker benötigt eine X11-Bibliothek. Sie müssen -lX11 für den Linker angeben
Versuchen Sie es mit
/usr/local/cuda/bin/nvcc -arch=compute_30 -code=sm_30,compute_30 -o Main.o Display.o FileUtil.o Timer.o NeuralNetwork.o -L/usr/lib -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -L/usr/local/cuda/lib64 -lGLEW -lglfw3 -lGL -lGLU -lcuda -lcudart -lX11
Versuchen Sie, -pthread am Ende der Bibliotheksliste (Befehlszeile) im Makefile hinzuzufügen.
Es hat für mich funktioniert.