Spero che questo possa essere d'aiuto a coloro, come me, che sono nuovi a Linux e non trovano nulla di correlato a Linux particolarmente ovvio.
Come notato da talonmies, non sono in grado di collegarmi indirettamente e come tale ho bisogno di specificare eventuali librerie aggiuntive richieste dalle librerie che sto utilizzando. Vale a dire, se collego la libreria A, che richiede le librerie B e C, devo collegare tutte e tre le librerie affinché il programma si colleghi correttamente.
Per trovare quali altre librerie erano necessarie ho usato il pkg-config
comando, per il quale ho trovato una guida qui. Esecuzione di pkg-config --print-requires --print-requires-private glfw3
ha fornito il seguente output, che è l'elenco dei pacchetti richiesti da glfw3.
x11
xrandr
xi
xxf86vm
gl
Sono stato quindi in grado di trovare quali librerie avevo bisogno di includere eseguendo pkg-config --libs
, seguito dal nome della libreria. Ad esempio, pkg-config --libs x11
ha prodotto -lX11
.
Nota:puoi passare più elementi a pkg-config
come input, quindi in esecuzione
pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)
stamperà tutte le librerie aggiuntive che devi collegare (-lX11 -lXrandr -lXi -lXxf86vm -lGL
).
Il mio programma ora si collega correttamente, spero che questo sia utile a chiunque abbia un problema simile.
Il tuo linker ha bisogno della libreria X11, devi specificare -lX11 al linker
Prova
/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
Prova ad aggiungere -pthread alla fine dell'elenco delle librerie (riga di comando) nel Makefile.
Ha funzionato per me.