当前位置:C++技术网 > 资讯 > VS2017 Linux.targets error:g++ exited with code127

VS2017 Linux.targets error:g++ exited with code127

更新时间:2017-08-14 15:36:21浏览次数:1+次

        在使用VS2017编译代码时,提示了这样的错误:“Linux.targets error : g++ exited with code 127”。然后网上查了很久,都没有找到问题所在。

        而错误提示里并没有指明是编译错误,而是说的targets错误。也就是说,错误并不是语法问题,也不是链接问题。那就只有可能是环境问题了。VS2017本身的环境自然没有问题。因为VS2017上写Linux代码,编译环境是在Linux上的。所以要出问题,自然是Linux上的编译环境的问题。

        然后后面提示的是g++退出码为127。所以我们一般都是去查错误码127是怎么回事。然后你会发现,根本查不到什么。既然是g++的问题,那么我只好去Linux上看g++的情况。

        那么先就是查看一下gcc的版本,如下:

    查看一下gcc的版本

        看到了gcc版本是4.8.5,默认不支持C++11,需要额外开启C++11。我将VS2017的C++11特性关掉。VS2017项目里关闭C++11特性的设置如下(开启C++11支持也是如此):

    VS2017项目里关闭C++11特性的设置

        在右边下拉选择C99和C++98。然后再编译,依然同样的错误。不过回想起来,这样确实不能解决问题。因为错误并不是提示编译错误。如果是版本不对,会提示编译错误。而这个错误提示压根就不是编译错误。

        然后就针对g++来查看了版本,结果如下:

    [root@VM_5_214_centos ~]# g++ --version
-bash: g++: command not found

        这个命令竟然找不到,g++竟然没有安装。而我写的代码是.cpp文件,自然就会调用g++来编译了。为了验证这个推测,我编译了一个测试代码。结果如下:

    [root@VM_5_214_centos ~]# gcc t.cpp -L/usr/lib -luv -o hello
gcc: error trying to exec 'cc1plus': execvp: No such file or directory
[root@VM_5_214_centos ~]# gcc t.c -L/usr/lib -luv -o hello                                                        
/usr/bin/ld: skipping incompatible /usr/lib/libc.a when searching for -lc

        可以看到,gcc编译t.cpp的时候,提示错误了。发现找不到cc1plus,也就是找不到g++的支持。gcc是编译器的集合,当编译cpp文件时就会去找gcc的g++编译C++代码。而如何编译t.c就编译通过了。代码是一样的,只是后缀名不一样。而编译后的提示只是一个链接的提示,无关紧要。

        既然找到了问题所在,解决问题就好说了。我们安装一下g++就行了。

        安装g++请看《gcc和g++的区别:安装、版本、编译》。到此,这个问题就解决了 。在安装gcc的时候,并不会默认安装g++的,所以需要特别注意一下。不然这样问题,真的有点让人捉摸不透。