CUDA 10 不支持 7 之后的 Gcc 版本 - Arch Linux 中的 Qt 错误

6 qt gcc cuda g++ archlinux

我正在运行 Arch Linux 并尝试在 Qt 中构建一个项目,但是,Qt 出现以下错误:

/opt/cuda/include/crt/host_config.h:129: 错误:#error -- 不支持的 GNU 版本!不支持 7 之后的 gcc 版本!

我已经尝试过之前在这里找到的 Stack Overflow 帖子中的建议:

CUDA 与我的 gcc 版本不兼容

我没有使用确切的命令,因为我的 cuda 位于 /opt/cuda/bin/gcc。我对 g++ 执行了相同的命令。但是,终端输出这些文件已经链接。我确实通过转到实际文件并查看其属性来确认这一点。

有人可以建议解决我的问题吗?

Moh*_*leb 7

我设法使用这两行来做到这一点,这会将 cuda 的符号链接更新为 gcc7

ln -s /usr/bin/gcc-7 /usr/local/cuda/bin/gcc
ln -s /usr/bin/g++-7 /usr/local/cuda/bin/g++
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您安装了多个 cuda,您的 cuda 文件夹可能会有所不同。就我而言,它是`` sudo ln -s /usr/bin/g++-7 /usr/local/cuda-10.0/bin/g++ sudo ln -s /usr/bin/gcc-7 /usr/local/cuda -10.0/bin/gcc ``` (2认同)

Dou*_*eco 5

该问题来自 CUDA-10 主目录树中的 cuda-10.0/targets/x86_64-linux/include/crt/host_config.h 。您的架构的目标放置在 /opt 中。

有些帖子建议伪造不平等

    if __GNUC__ > 7
Run Code Online (Sandbox Code Playgroud)

    if __GNUC__ > 8
Run Code Online (Sandbox Code Playgroud)

但这是个坏主意。使用

    make 'NVCCFLAGS=-m64 -D__GNUC__=7' -k
Run Code Online (Sandbox Code Playgroud)

在一些微不足道的情况下是允许的,但本质上仍然是同样的糟糕黑客行为。

您的系统上可能有替代品,它构建了指向版本 8 gnu 工具链文件的符号链接。这就是为什么您会收到版本 7 已安装的指示。

您可以了解如何仅修改开发人员用户的替代帐户,但不能修改 root 或任何系统管理员帐户的替代帐户。您可能需要记住如何在 7 和 8 之间来回切换,这样您只在实际需要时才使用 7,因为许多其他事情可能只能使用 8 进行测试。

如果这对您不起作用,您可以从源代码构建 gcc-7。准备性系统管理工作包括 dnf 安装、从源代码构建、安装 7.4 gnu 编译器以及一组仅用于 CUDA 开发的路径。如果您安装了带有适当标准库的 gnu gcc 和 g++ 版本 8 并且它可以工作,则可以相对轻松地安装版本 7 编译器。

浏览并找到https://gcc.gnu.org/mirrors.html上列出的最近的镜像,然后复制 gcc-7.4.0.tar.xz 的链接位置并将其放置在 shell 变量 u 中,如本例所示。

    u="http://mirrors.concertpass.com/gcc/releases/gcc-7.4.0/gcc-7.4.0.tar.xz"
Run Code Online (Sandbox Code Playgroud)

然后您可以按照命令执行其余操作。

    sudo dnf install libmpc-devel
    cd
    mkdir -p scratch
    cd scratch
    wget -O - "$u" |tar Jxf -
    cd gcc-7.4.0
    mkdir build
    cd build
    ../configure --prefix=/usr/local/gcc-7
    make
    sudo bash -c "cd \"`pwd`\"; make install"
Run Code Online (Sandbox Code Playgroud)

然后,您可以在您开发的 shell 和工具中执行此操作。出于与上述相同的原因,请勿将其放入系统登录设备或 .bashrc 或 .bash_profile 中。其他的事情只能用版本 8 进行测试。相反,请将它们放置在它们所属的开发环境中。

    LD_LIBRARY_PATH=/usr/local/gcc-7/lib64:$LD_LIBRARY_PATH
    LD_LIBRARY_PATH=/usr/local/gcc-7/lib:$LD_LIBRARY_PATH
    LD_LIBRARY_PATH=/usr/local/cuda-10.0/NsightCompute-1.0/host/linux-desktop-glibc_2_11_3-glx-x64/Plugins:$LD_LIBRARY_PATH
    LD_LIBRARY_PATH=/usr/local/cuda-10.0/NsightCompute-1.0/target/linux-desktop-glibc_2_11_3-glx-x64:$LD_LIBRARY_PATH
    LD_LIBRARY_PATH=/usr/local/cuda-10.0/targets/x86_64-linux/lib/stubs:$LD_LIBRARY_PATH

    PATH=/usr/local/gcc-7/bin:$PATH
    PATH=/usr/local/cuda-10.0/bin:$PATH
    PATH=$HOME/big/cuda.samples/NVIDIA_CUDA-10.0_Samples/bin/x86_64/linux/release:$PATH
Run Code Online (Sandbox Code Playgroud)