【问题标题】:NVCC won't look for libraries in /usr/lib/x86_64-linux-gnu - why?NVCC 不会在 /usr/lib/x86_64-linux-gnu 中查找库 - 为什么?
【发布时间】:2020-08-12 00:01:09
【问题描述】:

考虑以下 CUDA 程序,在一个名为 foo.cu 的文件中:

#include <cooperative_groups.h>
#include <stdio.h>

__global__ void my_kernel() {
    auto g = cooperative_groups::this_grid();
    g.sync();
}

int main(int, char **) {
    cudaLaunchCooperativeKernel( (const void*) my_kernel, 2, 2, nullptr, 0, nullptr);
    cudaDeviceSynchronize();
}

这个程序需要用-rdc=true编译(见this question);并且需要与libcudadevrt 明确链接。好的,没问题……是吗?

$ nvcc -rdc=true -o foo  -gencode arch=compute_61,code=sm_61 foo.cu  -lcudadevrt
nvlink error   : Undefined reference to 'cudaCGGetIntrinsicHandle' in '/tmp/tmpxft_000036ec_00000000-10_foo.o'
nvlink error   : Undefined reference to 'cudaCGSynchronizeGrid' in '/tmp/tmpxft_000036ec_00000000-10_foo.o'

只有当我使用-L/usr/lib/x86_64-linux-gnu 明确添加库的文件夹时,它才愿意构建我的程序。

这很奇怪,因为我系统上的所有 CUDA 库都在那个文件夹中。为什么 NVCC/nvlink 没有进去看?

注意事项:

  • 我正在使用 Devuan GNU/Linux 3.0。
  • CUDA 10.1 作为分发包安装。
  • 带有 GeForce 1050 Ti 卡的 x86_64 机器。

【问题讨论】:

  • Devuan 不是 CUDA 开发支持的发行版。在 Ubuntu(例如)上,使用 packages for installation directly from NVIDIA,我无需添加此处指示的 -L 开关即可使其正常工作。
  • @RobertCrovella:仍然 - nvlink 搜索的路径是什么?有没有我可以设置的环境变量?
  • 即使我能回答这样的问题,我认为这样做也是不明智的。它可以与其他未来的读者交流,这可能是安全或明智的做法。我不认为它是。我的建议是切换到受支持的开发环境。
  • @RobertCrovella:我现在在 Ubuntu Bionic 上see this link failure受支持的发行版。
  • 我刚刚在 Ubuntu 20.04 上尝试了 CUDA 11.2。使用您指定的命令,您在这个问题中的代码可以干净地编译。然后我尝试了this container。它也可以干净地编译。所以我无法重现那个观察结果。我无法根据该 travis 输出进​​行调试。这显然是某种环境问题。如果您可以从干净的操作系统安装中开发出一套简洁的说明来显示问题,也许可以提交一个错误

标签: cuda linker-errors


【解决方案1】:

NVCC,或者可能是 nvlink,在名为 LIBRARIES 的环境变量中查找路径。但是 - 在这样做之前,shell 脚本 /etc/nvcc.profile 会被执行(至少,它在 Devuan 上)。

在 Devuan 3.0 上,该文件有一行说:

LIBRARIES   =+ $(_SPACE_) -L/usr/lib/x86_64-linux-gnu/stubs

这就是您的 NVCC 默认情况下的位置。

因此,您可以做以下两件事之一:

  1. 在 NVCC 之外设置环境变量,例如在您的 ~/.profile~/.bashrc 文件中:

    export LIBRARIES=-L/usr/lib/x86_64-linux-gnu/
    
  2. nvcc.profile 行更改为:

    LIBRARIES   =+ $(_SPACE_) -L/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu/stubs
    

NVCC 将成功构建您的二进制文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2012-11-27
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 2019-02-23
    • 2017-12-27
    • 2014-10-14
    相关资源
    最近更新 更多