2010-04-26 11 views
9

So che ci sono molte altre domande simili a questo, ma nessuna delle soluzioni postulato ci stanno lavorando per meCercando di 'fare' CUDA SDK, ld non può trovare la libreria, ldconfig dice che può

Fondamentalmente , rendendo i file di esempio SDK, ottengo /usr/bin/ld: cannot find -lcuda che sarebbe un abbastanza facile 'trovare la libreria e gettarlo ai ldconfig', ad eccezione ldconfig dice già che ha lo ...

$ 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 

e ho controllato, non v'è un symlink libcuda.so -> libcuda.so.1 ma sono ancora confuso sul perché libcuda.so -> ... doe snt show

Mi manca qualcosa di veramente ovvio. Qualche idea?

+3

Trovato questa domanda tramite Google. Dal momento che sto avendo un problema simile 3 anni dopo, ho pensato di notare la mia soluzione: per almeno gli esempi dell'SDK CUDA 5.0 e il mio driver corrente (304.64), questo problema può essere risolto usando 'make EXTRA_LDFLAGS =" -L/usr/lib64/nvidia "' (cambia lib64 per lib su sistemi a 32 bit). Il linker sta cercando in/usr/lib (64), ma il driver ha installato cose in usr/lib (64)/nvidia, ma i makefile forniti utilizzano "EXTRA_LDFLAGS". – Sam

risposta

7

ldconfig tratta solo con le librerie di runtime, mentre ld riguarda le librerie di build. A seconda di come sono state installate le librerie CUDA, potrebbe essere necessario installare un pacchetto aggiuntivo per il collegamento simbolico utilizzato in buildtime, oppure potrebbe essere necessario passare un'opzione -L a gcc o ld per indicare dove si trova il collegamento simbolico in fase di compilazione.

+0

codificatore IANA esperto, quindi ho capito circa il 70% di quello che hai appena detto: D ma è lì da qualche parte per aggiungere questi percorsi al posto di _Ling sempre, simile al $ PATH envvar? Ho già provato ad aggiungere le directory in un file conf sotto ld.so.conf.d, ma questo non ha risolto nulla. – Bolster

+0

No. E la modifica di '/ etc/ld.so.conf.d' ha effetto solo su ld.so, che influenza solo il runtime. Se vuoi una soluzione semi-permanente, dovresti cercare di creare un makefile per il tuo progetto. –

+2

Questa è in realtà una lacuna nei Makefile dell'SDK CUDA. Dovrebbero passare l'opzione -L corrente per impostazione predefinita. La posizione corrente in cui metterla è 'C/common/common.mk: 148'. Cambia questa linea in 'LINKFLAGS + = -L/usr/lib/nvidia-current'. – kynan

1

Provare ad aggiungere -L/usr/local/cuda/lib prima di -lcuda sulla riga di comando del compilatore/linker.

+0

FYI, A causa della grepping, libcuda non è in realtà in/usr/local/cuda/lib, è in/usr/lib/nvidia-current/libcuda – Bolster

7

Aggiunga al Bash_profile

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 

e la fonte Bash_profile

+3

Come una correzione temporanea puoi anche fare 'make LIBRARY_PATH =/usr/lib/nvidia-current: $ LIBRARY_PATH' quando costruisci gli esempi di codice SDK. – kynan

+0

Ho svalutato questa risposta, ma presto ho scoperto che questo non funziona per me e non posso annullare l'upvote. Comunque, sto usando un'altra libreria invece di CUDA. – duleshi

Problemi correlati