/ usr / bin / ld:找不到-lcudart

时间:2012-03-09 12:13:33

标签: cuda nvcc

我在尝试编译CUDA程序时收到以下消息:

  

/ usr / bin / ld:找不到-lcudart

之前从未遇到过这种错误。我的PATH有问题吗?

这是编译命令:

  

gfortran -g -O2 -ffree-line-length-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_acoustic.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_acoustic.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/spec/it_update_displacement_cuda.cuda.o   ../../obj/spec/noise_tomography_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:找不到-lcudart

     

collect2:ld返回1退出状态

编辑:

我已将连接命令更改为

  

gfortran -g -O2 -ffree-line-length-none -I ../ shared / -L $ CUDA_HOME / lib [rest following]

我的所有PATH似乎都没问题,但我仍然遇到同样的错误。

EDIT2:

错误是我试图编译的代码是64位,所以我需要给路径一个不同的.so集,它位于

  

/ usr / local / cuda / lib64

现在编译运行良好,没有任何问题。

2 个答案:

答案 0 :(得分:8)

您没有为链接器指定CUDA库的位置,这就是链接失败的原因。 nvcc被“自动”配置为查找CUDA运行时库组件,但如果直接与主机编译器链接,则需要向编译器明确指定它们的位置。尝试将链接命令更改为:

gfortran -g -O2 -ffree-line-length-none -I../shared/ -L$CUDA_HOME/lib [rest follows]

其中CUDA_HOME表示安装CUDA工具包的路径。通常,这是Linux和OS X系统上的/usr/local/cuda。然后,您需要确保LD_LIBRARY_PATH包含$CUDA_HOME/lib的条目,以便可执行文件将在运行时动态加载所需的CUDA库。

修改

另见this

答案 1 :(得分:1)

我修好了!转到你的makefile并将/ usr / local / cuda /更改为/usr/local/cuda-7.0(如果那是你得到的) 它对我有用