2010-04-26 10 views
9

Sé que hay muchas otras preguntas similares a éste, pero ninguna de las soluciones postuladas no están trabajando para míTratando de 'Hacer' CUDA SDK, ld no puede encontrar la biblioteca, ldconfig dice que puede

Básicamente , por lo que los archivos de ejemplo SDK, consigo /usr/bin/ld: cannot find -lcuda lo que sería una bastante fácil 'encontrar la biblioteca y echarlo a ldconfig', excepto ldconfig ya se dice que tiene que ...

$ 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 

y he comprobado, no existe un enlace simbólico libcuda.so -> libcuda.so.1 pero todavía estoy confundido en cuanto a por qué libcuda.so -> ... gama snt mostrar

Me falta algo muy obvio. ¿Algunas ideas?

+3

Encontrado esta pregunta a través de Google. Dado que ahora tengo un problema similar 3 años después, pensé que anotaría mi solución: para al menos las muestras de CUDA 5.0 SDK y mi controlador actual (304.64), este problema se puede resolver usando 'make EXTRA_LDFLAGS =" -L/usr/lib64/nvidia "' (cambie lib64 por lib en sistemas de 32 bits). El enlazador está buscando en/usr/lib (64) pero el controlador instaló cosas en usr/lib (64)/nvidia, pero los makefiles proporcionados hacen uso de 'EXTRA_LDFLAGS'. – Sam

Respuesta

7

ldconfig se ocupa solo de las bibliotecas de tiempo de ejecución, mientras que ld se ocupa de las bibliotecas de tiempo de compilación. Dependiendo de cómo haya instalado las bibliotecas CUDA, es posible que necesite instalar un paquete adicional para el enlace simbólico utilizado en el momento de la compilación, o puede necesitar pasar una opción -L a gcc o ld para indicar dónde está el enlace simbólico de tiempo de compilación.

+0

codificador IANA experimentado, así que entendí aproximadamente el 70% de lo que acaba de decir: D, pero ¿hay algún lugar para agregar estas rutas en lugar de _Ling todo el tiempo, de forma similar al envvar $ PATH? Ya he intentado agregar los directorios a un archivo conf bajo ld.so.conf.d, pero eso no solucionó nada. – Bolster

+0

No. Y la modificación de '/ etc/ld.so.conf.d' solo afecta a ld.so, que solo afecta el tiempo de ejecución. Si quieres algún tipo de solución semipermanente, entonces deberías buscar crear un archivo MAKE para tu proyecto. –

+2

Esto es en realidad una deficiencia en los Makefiles de CUDA SDK. Deberían pasar la opción actual -L por defecto. El lugar actual para ponerlo es 'C/common/common.mk: 148'. Cambie esta línea a 'LINKFLAGS + = -L/usr/lib/nvidia-current'. – kynan

1

Intente agregar -L/usr/local/cuda/lib antes -lcuda en la línea de comandos del compilador/enlazador.

+0

FYI, debido a la grepping, libcuda no está realmente en/usr/local/cuda/lib, está en/usr/lib/nvidia-current/libcuda – Bolster

7

Agregar a .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 

y la fuente .bash_profile

+3

Como solución temporal, también puede hacer 'make LIBRARY_PATH =/usr/lib/nvidia-current: $ LIBRARY_PATH' al compilar las muestras del código SDK. – kynan

+0

Volví a subir esta respuesta, pero pronto descubrí que esto no funciona para mí y no puedo deshacer el voto alterno. Sin embargo, estoy usando otra biblioteca en lugar de CUDA. – duleshi

Cuestiones relacionadas