it-swarm.com.de

Verbindungsfehler: DSO fehlt in der Befehlszeile

Ich bin relativ neu in Linux (mit Ubuntu 14.04 LTS 64bit), komme aus Windows und versuche, ein vorhandenes CUDA-Projekt von mir zu portieren.

Beim Verlinken via

/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

Ich stelle den folgenden Fehler fest:

/usr/bin/ld: /usr/local/lib/libglfw3.a(x11_clipboard.c.o): undefined reference to  symbol 'XConvertSelection'
//usr/lib/x86_64-linux-gnu/libX11.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [CUDANN] Error 1

Die Antwort scheint eng mit den Lösungen in diesem Beitrag verwandt zu sein ( Fehlerhafter Verknüpfungsfehler: DSO fehlt in der Befehlszeile ), obwohl ich mich aufgrund meiner Unerfahrenheit mit Linux nicht an meine Probleme anpassen konnte.

Irgendwelche Ideen, was das Problem sein könnte?

Hier ist die vollständige Ausgabe während der Kompilierung: https://Gist.github.com/wbolden/857eddd11e4dcb915c02

Und hier ist mein Versuch eines Makefiles: https://Gist.github.com/wbolden/135033daae04ed0d8cf3

13
Will Bolden

Ich hoffe, dass dies für diejenigen, wie ich, die Linux-Neulinge sind und nichts mit Linux zu tun haben, von Vorteil ist, um besonders offensichtlich zu sein.

Wie von talonmies angemerkt, kann ich nicht indirekt verknüpfen und muss daher zusätzliche Bibliotheken angeben, die von den verwendeten Bibliotheken benötigt werden. Das heißt, wenn ich Bibliothek A verlinke, für die die Bibliotheken B und C erforderlich sind, muss ich alle drei Bibliotheken verknüpfen, damit das Programm korrekt verknüpft werden kann.

Um herauszufinden, welche anderen Bibliotheken benötigt werden, habe ich den Befehl pkg-config verwendet, für den ich eine Anleitung hier gefunden habe. Beim Ausführen von pkg-config --print-requires --print-requires-private glfw3 wurde die folgende Ausgabe ausgegeben. Dies ist die Liste der von glfw3 benötigten Pakete.

x11
xrandr
xi
xxf86vm
gl

Ich konnte dann herausfinden, welche Bibliotheken ich einschließen musste, indem ich pkg-config --libs gefolgt von dem Namen der Bibliothek ausführte. Beispielsweise ergab pkg-config --libs x11-lX11.

Hinweis: Sie können mehrere Elemente als Eingabe an pkg-config übergeben 

pkg-config --libs $(pkg-config --print-requires --print-requires-private glfw3)

druckt alle zusätzlichen Bibliotheken aus, die Sie zum Verknüpfen benötigen (-lX11 -lXrandr -lXi -lXxf86vm -lGL).

Mein Programm ist jetzt erfolgreich verlinkt, ich hoffe, das ist hilfreich für alle, die ein ähnliches Problem haben.

22
Will Bolden

Ihr Linker benötigt eine X11-Bibliothek. Sie müssen -lX11 für den Linker angeben

Versuchen 

/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
7
Rahul R Dhobi

Verwenden Sie die folgenden Befehle, um das Problem zu beheben:

FLAGS=-lX11 ./configure --prefix=/usr --disable-static
make
make install
0
HuuHoangNguyen