2010-04-26 10 views
9

Ich kenne viele andere Fragen ähnlich wie diese gibt es, aber keine der Lösungen gesetzt gibt es für mich arbeitenDer Versuch, CUDA SDK ‚Make‘, ld nicht Bibliothek finden kann, sagt ldconfig es kann

Grundsätzlich , die SDK-Beispieldateien zu machen, bekomme ich /usr/bin/ld: cannot find -lcuda die eine einfache genug ‚die Bibliothek finden und es ldconfig werfen‘ sein würde, außer ldconfig schon sagt, es hat ...

$ sudo ldconfig -v | grep cuda 
/usr/local/cuda/lib64: 
    libcudartemu.so.3 -> libcudartemu.so.3.0.14 
    libcudart.so.3 -> libcudart.so.3.0.14 
/usr/local/cuda/lib: 
    libcudartemu.so.3 -> libcudartemu.so.3.0.14 
    libcudart.so.3 -> libcudart.so.3.0.14 
    libcuda.so.1 -> libcuda.so.195.36.15 
    libcuda.so.1 -> libcuda.so.195.36.15 
    libicudata.so.42 -> libicudata.so.42.1 

und ich überprüft, gibt es ein Symlink libcuda.so -> libcuda.so.1 aber ich bin immer noch verwirrt, warum libcuda.so -> ... doe snt zeigen

Ich muss etwas wirklich offensichtlich fehlen. Irgendwelche Ideen?

+3

diese Frage über Google gefunden. Da ich jetzt 3 Jahre später ein ähnliches Problem habe, dachte ich, ich würde meine Lösung notieren: Für mindestens die CUDA 5.0 SDK-Samples und meinen aktuellen Treiber (304.64) kann dieses Problem gelöst werden, indem 'make EXTRA_LDFLAGS =" verwendet wird. -L/usr/lib64/nvidia "' (lib64 für lib auf 32-Bit-Systemen wechseln). Der Linker sucht in/usr/lib (64), aber der Treiber installiert Dinge in usr/lib (64)/nvidia, aber die bereitgestellten Makefiles verwenden 'EXTRA_LDFLAGS'. – Sam

Antwort

7

ldconfig befasst sich nur mit Laufzeitbibliotheken, während ld mit Build-Time-Bibliotheken befasst. Je nachdem, wie Sie die CUDA-Bibliotheken installiert haben, müssen Sie möglicherweise ein zusätzliches Paket für den Symlink installieren, das zur Build-Zeit verwendet wird, oder Sie müssen eine -L-Option an gcc oder ld übergeben, um den Symlink für die Build-Zeit anzugeben.

+0

IANA erfahrenen Coder, so verstand ich etwa 70% von dem, was Sie gerade gesagt haben: D, aber gibt es irgendwo diese Pfade hinzuzufügen, statt _Ling sie die ganze Zeit, ähnlich der $ PATH-envvar? Ich habe bereits versucht, die Verzeichnisse zu einer Conf-Datei unter ld.so.conf.d hinzuzufügen, aber das hat nichts behoben. – Bolster

+0

Nein. Das Ändern von '/ etc/ld.so.conf.d' betrifft nur ld.so, was nur die Laufzeit betrifft. Wenn Sie eine semipermanente Lösung wünschen, sollten Sie nach einem Makefile für Ihr Projekt suchen. –

+2

Dies ist ein Fehler in den CUDA SDK Makefiles. Sie sollten standardmäßig die aktuelle Option -L übergeben. Der aktuelle Ort, um es zu setzen ist 'C/common/common.mk: 148'. Ändern Sie diese Zeile in "LINKFLAGS + = -L/usr/lib/nvidia-current". – kynan

1

Versuchen Sie, -L/usr/local/cuda/lib vor -Lcuda in der Compiler/Linker-Befehlszeile hinzuzufügen.

+0

FYI, wegen der grepping ist libcuda nicht wirklich in/usr/local/cuda/lib, es ist in/usr/lib/nvidia-current/libcuda – Bolster

7

Add

export PATH=/usr/local/cuda/bin:$PATH 
export LPATH=/usr/lib/nvidia-current:$LPATH 
export LIBRARY_PATH=/usr/lib/nvidia-current:$LIBRARY_PATH 
export LD_LIBRARY_PATH=/usr/lib/nvidia-current:/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH 

und Quelle .bash_profile

Bash_profile

+3

Als vorübergehende Lösung können Sie auch 'make LIBRARY_PATH =/usr/lib/nvidia-current: $ LIBRARY_PATH' machen, wenn Sie die SDK-Codebeispiele erstellen. – kynan

+0

Ich habe diese Antwort uplooted, aber bald fand ich, dass dies nicht für mich funktioniert und ich kann die upvote nicht rückgängig machen. Ich benutze jedoch eine andere Bibliothek anstelle von CUDA. – duleshi