You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04下clang软链接无法编译C++文件问题排查

问题原因分析

你的软链接创建确实存在一个关键问题——clang和clang++本质是同一个二进制程序,它通过调用时的程序名来切换编译模式。

具体来说:

  • 当程序被叫做clang(或类似带clang的名字但不含++)时,默认以C语言编译模式运行;
  • 当程序被叫做clang++(或类似clang++-x.x的名字)时,才会自动启用C编译模式,包括链接C标准库、识别C++语法等。

你创建的软链接cclang指向了clang++-5.0,但程序运行时会检测自己的调用名称是cclang,而非clang++相关的名字,所以它会切换回默认的C编译模式,这就导致你编译C文件时出现和用clang编译C一样的错误。

解决方案

这里有两种可行的解决办法:

方案一:修改软链接名称为clang++

如果你不需要自定义名字,直接把软链接改成标准的clang++即可:

# 先删除之前的cclang软链接(如果它在/usr/bin下)
sudo rm /usr/bin/cclang
# 创建指向clang++-5.0的标准软链接
sudo ln -s /usr/bin/clang++-5.0 /usr/bin/clang++

之后直接用clang++ helloworld.cpp就能正常编译C++文件了。

方案二:用Shell脚本替代软链接(保留cclang名字)

如果你一定要用cclang作为调用名称,可以创建一个简单的Shell脚本代替软链接:

  1. 创建脚本文件:
sudo nano /usr/bin/cclang
  1. 在脚本中写入以下内容:
#!/bin/bash
/usr/bin/clang++-5.0 "$@"
  1. 给脚本添加执行权限:
sudo chmod +x /usr/bin/cclang

这样当你运行cclang helloworld.cpp时,脚本会直接调用clang++-5.0并传递所有参数,程序会以C++模式正常编译。

验证建议

你可以先检查当前软链接的状态,确认它的指向和位置:

ls -l /usr/bin/clang /usr/bin/cclang

如果软链接不在/usr/bin目录下,可能需要将它移到该目录,或者把软链接所在目录添加到系统PATH环境变量中,否则系统可能无法找到这个命令。

内容的提问来源于stack exchange,提问作者Bin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:37:53