Linux:Ubuntu18.04
ROS:melodic
在VS Code下编写代码,汇总问题及解决办法。
问题1:编译C++代码可通过,但抛出错误警告以及代码补全异常
通过如图1-1所示示例代码,呈现问题状况。
原因
: C++编译器的问题。
解决方法
: 直接使用Ctrl+Shift+P快捷键,在弹出的命令行输入框内输入C++
,选择C/C++:编辑配置(UI)
,然后找到编译器路径
选择/usr/bin/g++
。
或者在c_cpp_properties.json
文件中将compilerPath
更改为/usr/bin/g++
。
我在研究这个错误问题之后,发现几乎所有的文章都认为是因为没有安装gcc和g++,或者错误的安装了gcc和g++,再或者是已安装的gcc和g++的版本不一致造成的。然而,这似乎都不是真正的原因:
如图1-4,通过查看gcc和g++的版本,gcc和g++都已经安装,gcc版本为9.4.0;g++版本为7.5.0。由此可以得出这个问题不是安装的原因。
我也尝试过重新安装 gcc 和 g++ 但仍然出现相同的错误。
我也尝试过下述命令,仍然出现相同的错误:
sudo apt-get update
sudo apt-get install --reinstall build-essential
如1-5,在/usr/bin
目录下查看gcc和g++已经安装的版本,而且各自的软链接gcc -> gcc-9
、g++ -> g++-7
都和上面查到的版本保持一致。
最后还有一个疑问
:根据当前的gcc版本(gcc-9)安装对应的g++版本(g+±9),至于g++软链接到哪个版本(当前g++ -> g++ -7)不用管,但就是这样,VS Code抛出错误警告以及代码补全异常全部都没有了(在c_cpp_properties.json
文件中compilerPath
为/usr/bin/gcc
)!这是什么原因?
sudo apt-get install g++-9
“GCC”是 GNU 编译器集合的常用缩写词。这既是编译器最通用的名称,也是强调编译 C 程序时使用的名称(以前的缩写代表“GNU C Compiler”)。
在提到 C++ 编译时,通常将编译器称为“G++”。由于只有一个编译器,因此无论在何种语言环境下,将其称为“GCC”也是准确的;但是,当重点是编译 C++ 程序时,术语“G++”更有用。
官方文档出处:https://gcc.gnu.org/onlinedocs/gcc-9.5.0/gcc/
gcc或 g++ 只是选择具有不同默认选项的不同前端,它是同一个编译器(例如 GNU 编译器集合)。据我了解,两者都根据文件扩展名决定将程序编译为 C 还是 C++。两者都能够链接到 C++ 标准库,但默认情况下只有 g++ 这样做。因此,如果您有一个用 C++ 编写的程序,并且碰巧不需要链接到标准库,那么 gcc 会碰巧做正确的事情;但是,g++ 也会如此。所以真的没有理由不使用 g++ 进行一般的 C++ 开发。