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.

¿Fue útil?

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í

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top