/usr/bin/ld:no puedo encontrar -lcudart
Pregunta
Recibo el siguiente mensaje al intentar compilar un programa CUDA:
/usr/bin/ld:no puedo encontrar -lcudart
Nunca antes había recibido este tipo de error.¿Hay algún problema con mi RUTA?
Aquí está el comando de compilación:
GFORTRAN -G -O2 -ffree-lengthnength-none -i ../ Shared/-o ../../bin/xspecfem3d ../../obj/spec/program_specfem3d.o ../..//// obj/spec/specfem3d_par.o ../../obj/spec/pml_init.o ../../obj/spec/compute_boundary_kernel.o ../../obj/spec/compute_kernels.o ../. ./obj/spec/compute_forces_acoustic.o ../../obj/spec/compute_forces_acoustic_pot.o ../../obj/spec/compute_forces_acoustic_pml.o ../../obj/spec/compute_forces_elastic.o .. /..../obj/spec/Compute_Forces_elastic_dev.o ../../obj/spec/Compute_Forces_elastic_nodev.o ../../obj/spec/Compute_Forces_elastic_dev_openmp.o ../../obj/spec/Compute_add_Sources_acustic.o ..// ../../obj/spec/Compute_add_Sources_elastic.o ../../obj/spec/Compute_Coupling_acoustic_el.o ../../obj/spec/Compute_Coupling_elastic_ac.o ../../obj/spec/Compute_stacey_acustic .o ../../obj/spec/compute_stacey_elastic.o ../../obj/spec/compute_gradient.o ../../obj/spec/compute_interpolated_dva.o ../../obj/spec /initialize_simulation.o ../../obj/spec/read_mesh_databases.o ../../obj/spec/setup_gll_points.o ../../obj/spec/write_movie_output.o ../../obj /spec/create_color_image.o ../../obj/spec/write_seismograms.o ../../obj/spec/write_output_ascii.o ../../obj/spec/detect_mesh_surfaces.o ../ .. /obj/spec/setup_movie_meshes.o ../../obj/spec/read_topography_bathymetry.o ../../obj/spec/setup_sources_receivers.o ../../obj/spec/prepare_timerun.o ../ ../obj/spec/iterate_time.o ../../obj/spec/finalize_simulation.o ../../obj/spec/save_adjoint_kernels.o ../../obj/spec/specfem3d.o. ./../obj/spec/assemble_mpi_vector.o ../../obj/spec/make_gravity.o ../../obj/spec/noise_tomography.o ../../lib/libspecfem.a. ./../obj/spec/check_fields_cuda.cuda.o ../../obj/spec/compute_add_sources_acoustic_cuda.cuda.o ../../obj/spec/compute_add_sources_elastic_cuda.cuda.o ../../../ obj/spec/compute_coupling_cuda.cuda.o ../../obj/spec/Compute_forces_acoustic_cuda.cuda.o ../../obj/spec/Compute_Forces_elastic_cuda.cuda.o ../../obj/spec/Compute_kernels_cuda .cuda.o ../../obj/spec/compute_stacey_acoustic_cuda.cuda.o ../../obj/spec/compute_stacey_elastic_cuda.cuda.o ../../obj/it_update_displaustic_cuda.cuda.o. ./../OBJ/SPEC/NOISE_TOMOGRAFÍA_CUDA.CUDA.O ../../OBJ/SPEC/PREPARE_MESH_CONSTANTS_CUDA.CUDA.o ../../obj/spec/transfer_fields_cuda.cuda.o ../..// obj/spec/write_seismograms_cuda.cuda.o ../../obj/spec/save_and_compare_cpu_vs_gpu.cudacc.o ../../obj/spec/serial.o -lcuda -lcudart -lcublas
/usr/bin/ld:no puedo encontrar -lcudart
recoger2:LD devolvió el código de salida 1
Editar:
He cambiado el comando de vinculación a
gfortran -g -O2 -ffree-line-length-none -I../shared/ -L$CUDA_HOME/lib [el resto sigue]
Y todas mis RUTAS parecen estar bien, pero sigo teniendo el mismo error.
Editar2:
El error fue que el código que estaba intentando compilar estaba en 64 bits, por lo que necesitaba darle a la ruta un conjunto diferente de .so, que se encuentran en
/usr/local/cuda/lib64
Ahora la compilación funcionó bien y sin ningún problema.
Solución
No está especificando la ubicación de las bibliotecas CUDA en el vinculador, es por eso que el vínculo falla. nvcc
está configurado "automágicamente" para encontrar los componentes de la biblioteca de tiempo de ejecución de CUDA, pero si se vincula directamente con un compilador host, deberá especificar explícitamente su ubicación en el compilador.Intente cambiar el comando de vinculación a esto:
gfortran -g -O2 -ffree-line-length-none -I../shared/ -L$CUDA_HOME/lib [rest follows]
dónde CUDA_HOME
denota la ruta donde está instalado el kit de herramientas CUDA.Normalmente esto es /usr/local/cuda
en sistemas Linux y OS X.Luego tendrás que asegurarte LD_LIBRARY_PATH
contiene una entrada para $CUDA_HOME/lib
para que el ejecutable cargue dinámicamente las bibliotecas CUDA requeridas en tiempo de ejecución.
EDITAR:
Ver también este
Otros consejos
¡Yo arreglé esto!Ir a tu makefile y cambiar / usr / local / cuda / a /usr/local/cuda-7.0 (Si eso es lo que tienes) Funcionó para mí