【问题标题】:/usr/bin/ld: cannot find -lcudart/usr/bin/ld: 找不到 -lcudart
【发布时间】:2012-03-26 21:26:41
【问题描述】:

我在尝试编译 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 [其余如下]

我的所有 PATH 似乎都正常,但我仍然遇到同样的错误。

编辑2:

错误是我试图编译的代码是 64 位的,所以我需要为路径提供一组不同的 .so ,它们位于

/usr/local/cuda/lib64

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

【问题讨论】:

  • 你能发布你正在使用的编译命令或makefile吗?
  • 当然,但它确实有点大......
  • 你安装了 CUDA toolkit 吗?
  • 当然,我已经将它与 CUDA 本身一起安装了

标签: cuda nvcc


【解决方案1】:

您没有将 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

【讨论】:

  • 什么不起作用?怎么没用?你能更新你的问题吗?
  • 我已经更新了链接命令,并且 LD_LIBRARY_PATH 确实有 $CUDA_HOME/lib 的条目,但仍然发生同样的错误。
【解决方案2】:

我解决了这个问题!转到您的 makefile 并将 /usr/local/cuda/ 更改为 /usr/local/cuda-7.0 (如果这是您所得到的) 它对我有用

【讨论】:

  • 这个makefile在哪里?你能说得更具体点吗?
猜你喜欢
  • 2021-05-07
  • 2022-01-08
  • 2011-07-16
  • 2012-05-17
  • 2020-04-14
  • 2018-12-13
  • 2015-09-22
  • 2020-01-19
  • 2012-01-14
相关资源
最近更新 更多