【问题标题】:CUDA on Fedora compilation failureCUDA 上 Fedora 编译失败
【发布时间】:2013-07-19 22:04:13
【问题描述】:

查看在我的新 Fedora19 系统上安装 CUDA 5.0 后,我发现 CUDA 5.5 是一个更好的选择,因为它采用 rpm 格式。我按照here 的安装说明进行操作,在我尝试编译示例之前,一切都很顺利。首先,它将示例安装到 /usr/local/cuda/samples,我必须确保我的 LD_LIBRARY_PATH 包含 /usr/local/cuda/lib(不仅仅是 5.5 版本),但随后我得到以下两个当我尝试运行“make all”命令时出错。

../../common/inc/exception.h: In constructor ‘Exception<Std_Exception>::Exception()’:
../../common/inc/exception.h:129:94: warning: delegating constructors only available with -std=c++11 or -std=gnu++11 [enabled by default]
Exception<Std_Exception>::Exception() :

我以为 C++11 是默认版本?然后,当我开始尝试编译 matrixMulDrv 时,我收到以下错误,这真的没有意义:

/usr/local/cuda-5.5/bin/nvcc -ccbin g++   -m64        -o matrixMulDrv matrixMulDrv.o  -L/usr/lib64/nvidia -lcuda
/bin/ld: cannot find -lcuda
collect2: error: ld returned 1 exit status

我想知道是否还有其他人遇到过这种性质的问题。我已经迁移到 5.5,以便可以使用当前的 gcc 编译器(4.8.1)。当我查看 /usr/lib64/nvidia 时,我看到了我认为需要的所有文件,包括 libcuda.so.1。有没有其他人看过这个?

【问题讨论】:

  • 如果它告诉你,试试“-std=c++11”
  • 我会的。我需要找到它控制整体标志的位置并覆盖该特定标志。

标签: c++ cuda fedora nvidia


【解决方案1】:

关于第一个问题:

../../common/inc/exception.h: In constructor ‘Exception<Std_Exception>::Exception()’:
../../common/inc/exception.h:129:94: warning: delegating constructors only available with -std=c++11 or -std=gnu++11 [enabled by default]
Exception<Std_Exception>::Exception() :

这些消息只是警告,因此编译仍应继续进行而不会出现问题。

关于第二个问题:

/bin/ld: cannot find -lcuda
collect2: error: ld returned 1 exit status

查看 /usr/lib64/nvidia 并确保 libcuda.so 和 libcuda.so.1 符号链接都存在并指向 libcuda.so.[您的驱动程序版本]。

在我的安装中,无论出于何种原因,都没有创建 /usr/lib64/nvidia/libcuda.so 符号链接。如果你的也不见了,那么输入(作为根):

ln -s /usr/lib64/nvidia/libcuda.so.VERSION /usr/lib64/nvidia/libcuda.so

VERSION 替换为您的 nvidia 驱动程序的版本号(例如 libcuda.so.319.32)。

这能解决您的问题吗?

【讨论】:

  • 感谢您的提示!我会让你知道这是如何工作的。我想我只是搞砸了安装的一部分,或者在同一区域安装了不一致的驱动程序。
  • 如果您想解决您看到的错误,我应该指出,如果您在您的 LD_LIBRARY_PATH 中包含/usr/local/cuda/lib不包含 /usr/local/cuda/lib64,你也会遇到麻烦,构建 64 位应用程序。根据您的描述,这可能是唯一的问题。但我仍然不知道这是否足以让它工作,或者你是否会在 F19 与 cuda 5.5 上遇到兼容性问题。
【解决方案2】:

带有 GCC 4.7.2/GLIBC 2.16 的 Fedora 18 是 CUDA 5.5 RC 的 officially supported distro。 Fedora 19 不支持,也没有任何迹象表明支持 GCC 4.8.x。我对你遇到麻烦并不感到惊讶。您在/usr/lib64/nvidia 中看到的libcuda.so 与与most likely on your machine (2.17) 版本不同的GLIBC (2.16) 版本相关联。

我能想象到 Fedora 19 的唯一前进方法是将您的(即安装备用)GCC/GLIBC 降级到 Fedora 18 随附的版本。切换到 Fedora 18 可能更容易。

【讨论】:

  • 好吧,这就是我害怕的。我也把我的环境搞砸了,所以我要重新安装 Fedora19,然后从那里开始。
  • 如果您重新安装 F19,您的运气不会更好,除非您还计划安装(添加)不同的 GCC/GLIBC。冒着重蹈覆辙的风险,如果您从 F18 开始,您可能会获得更好的体验。
  • 对不起,我应该更清楚。我将安装 Fedora 19,然后加载不同的 gcc/glibc(这是我最终在我的 mac 上所做的),或者只是等待并看看会发生什么。我现在不需要开发,它只是很棒,因为我打算运行的集群有几个特斯拉节点。
【解决方案3】:

CUDA is highly specific to the Linux kernel version。例如,CUDA 6.5 只能保证与 Fedora 20 kernel 3.12 一起使用。

# Install kernel 3.16.2
sudo yum -y install https://kojipkgs.fedoraproject.org/packages/kernel/3.16.2/201.fc20/x86_64/kernel-3.16.2-201.fc20.x86_64.rpm
sudo yum -y install https://kojipkgs.fedoraproject.org/packages/kernel/3.16.2/201.fc20/x86_64/kernel-devel-3.16.2-201.fc20.x86_64.rpm
sudo yum -y install libvdpau-devel
sudo reboot

# Install cuda 6.5
wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.14_linux_64.run
sudo bash cuda_6.5.14_linux_64.run --override

降级内核以匹配CUDA System Requirements 中指定的版本会很有帮助。

【讨论】:

    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2018-03-09
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多