我正在运行Arch Linux并尝试在Qt中构建项目,但是Qt会出现以下错误:
/opt/cuda/include/crt/host_config.h:129:错误:#error-不支持的GNU版本!不支持高于7的gcc版本!
我已经尝试过以前的堆栈溢出帖子中的建议:
CUDA incompatible with my gcc version
我没有使用确切的命令,因为我的cuda位于/ opt / cuda / bin / gcc中。我为g ++执行了相同的命令。但是,终端输出这些文件已被链接。我确实通过转到实际文件并查看其属性来确认这一点。
有人可以建议解决我的问题吗?
答案 0 :(得分:3)
我设法使用了这两行,这会将cuda的符号链接更新为gcc7
ln -s /usr/bin/gcc-7 /usr/local/cuda/bin/gcc
ln -s /usr/bin/g++-7 /usr/local/cuda/bin/g++
答案 1 :(得分:1)
该问题来自主CUDA-10目录树中的cuda-10.0 / targets / x86_64-linux / include / crt / host_config.h。您的体系结构的目标放置在/ opt中。
有些帖子建议伪造不平等现象
object WhitelistedByZoneAttachmentConstraint : AttachmentConstraint {
override fun isSatisfiedBy(attachment: Attachment): Boolean {
return if (attachment is AttachmentWithContext) {
System.out.print("--attachment--"+attachment.id.toString())
val whitelist = attachment.whitelistedContractImplementations
?: throw IllegalStateException("Unable to verify WhitelistedByZoneAttachmentConstraint - whitelist not specified")
System.out.print("--whitelist--"+whitelist.toString())
attachment.id in (whitelist[attachment.stateContract] ?: emptyList())
} else false
}
说
if __GNUC__ > 7
但这是一个坏主意。使用
if __GNUC__ > 8
在某些琐碎的情况下,是允许的,但从根本上讲,还是同样的错误。
您的系统上可能有备用服务器,该备用服务器已经构造了指向版本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中,如本例所示。
make 'NVCCFLAGS=-m64 -D__GNUC__=7' -k
然后您可以将其余内容作为命令来完成。
u="http://mirrors.concertpass.com/gcc/releases/gcc-7.4.0/gcc-7.4.0.tar.xz"
然后在您使用其开发的Shell和工具中执行此操作。出于与上述相同的原因,请勿将其放入系统登录设备或.bashrc或.bash_profile中。其他内容只能使用版本8进行测试。而是将它们放置在它们所属的开发环境中。
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"