Con suerte, esto será de ayuda para aquellos, como yo, que son nuevos en Linux y no encuentran nada relacionado con Linux particularmente obvio.
Como lo señaló talonmies, no puedo vincular indirectamente y, como tal, necesito especificar las bibliotecas adicionales requeridas por las bibliotecas que estoy usando. Es decir, si vinculo la biblioteca A, que requiere las bibliotecas B y C, necesito vincular las tres bibliotecas para que el programa se vincule correctamente.
Para encontrar qué otras bibliotecas se necesitaban, usé el pkg-config comando, para el cual encontré una guía aquí. Ejecutando pkg-config --print-requires --print-requires-private glfw3 dio el siguiente resultado, que es la lista de paquetes requeridos por glfw3.
x11
xrandr
xi
xxf86vm
gl
Luego pude encontrar qué bibliotecas necesitaba incluir ejecutando pkg-config --libs , seguido del nombre de la biblioteca. Por ejemplo, pkg-config --libs x11 produjo -lX11 .
Nota:puede pasar varios elementos a pkg-config como entrada, entonces ejecutando
pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)
imprimirá todas las bibliotecas adicionales que necesita vincular (-lX11 -lXrandr -lXi -lXxf86vm -lGL ).
Mi programa ahora se vincula con éxito, espero que esto sea útil para cualquier persona con un problema similar.
Su enlazador necesita la biblioteca X11, debe especificar -lX11 para enlazar
Prueba
/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
Intente agregar -pthread al final de la lista de bibliotecas (línea de comando) en el Makefile.
Funcionó para mí.