J'espère que cela aidera ceux, comme moi, qui sont nouveaux sur Linux et qui ne trouvent rien de lié à Linux particulièrement évident.
Comme indiqué par talonmies, je ne suis pas en mesure de créer un lien indirect et, en tant que tel, j'ai besoin de spécifier toutes les bibliothèques supplémentaires requises par les bibliothèques que j'utilise. C'est-à-dire que si je lie la bibliothèque A, qui nécessite les bibliothèques B et C, je dois lier les trois bibliothèques pour que le programme se lie correctement.
Pour trouver quelles autres bibliothèques étaient nécessaires, j'ai utilisé le pkg-config
commande, pour laquelle j'ai trouvé un guide ici. Exécution de pkg-config --print-requires --print-requires-private glfw3
a donné la sortie suivante, qui est la liste des packages requis par glfw3.
x11
xrandr
xi
xxf86vm
gl
J'ai ensuite pu trouver les bibliothèques que je devais inclure en exécutant pkg-config --libs
, suivi du nom de la bibliothèque. Par exemple, pkg-config --libs x11
a donné -lX11
.
Remarque :vous pouvez transmettre plusieurs éléments à pkg-config
en entrée, donc en cours d'exécution
pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)
imprimera toutes les bibliothèques supplémentaires dont vous avez besoin pour lier (-lX11 -lXrandr -lXi -lXxf86vm -lGL
).
Mon programme est maintenant lié avec succès, j'espère que cela sera utile à toute personne ayant un problème similaire.
Votre éditeur de liens a besoin de la bibliothèque X11, vous devez spécifier -lX11 à l'éditeur de liens
Essayez
/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
Essayez d'ajouter -pthread à la fin de la liste des bibliothèques (ligne de commande) dans le Makefile.
Cela a fonctionné pour moi.