今天在windows2012R2服务器上面编译c++工程时报了下面的错误,
g++ -g -Wall -Wextra -c packet.cpp
make: g++: Command not found
make: * [packet.o] Error 127
看着这个错误,好像是编译工具出的问题,百度了一下,说是这个主要是没有安装gcc-c++.x86_64,导致的问题,但是我这个环境时研发部的开发环境,换言之,如果有这个问题,开发工作早就不能进行了,所以说这个应该和编译工具没有关系的,然后我又看了我的工程目录,发现一个问题,就是在我的makefile文件中,源文件应该是.cc文件来代表c++工程的文件,而由于习惯问题,我建立的源文件是.cpp类型的,应该是这个问题导致的编译不通过,更改了文件后缀,果然编译通过了。
在网上查找了一些东西,希望看到.cc&.cpp编译过程中有哪些不同,没找到,大多讲的时不同后缀的c++文件的区别,还给列一个列表,不同环境下c++文件如何命名,这些东西有一个人写就够了,别那么多,烂大街的货就别那么多了。下面我自己写的,当然有从网上搜的,个人总结。
我们都知道一件事,c++源文件经历四个步骤形成可执行文件,分别是,预编译,编译,汇编,链接这四个步骤,然后我百度了.cc&.cpp文件在不同阶段的命令,我猜测是因为使用gcc编译的缘故,故而将gcc&g++的命令写在下面,比较直观,不需要解释,我们就能看出来他们的区别:
预编译阶段:
g++:: g++ -E .cpp -o .i
gcc:: gcc -E .cc -o .i
编译阶段:
g++:: g++ -S .cpp > .s
gcc:: gcc -S .i -o .s
汇编阶段:
g++:: g++ -c .s -o .o (这一步使用了编译阶段生成的*.s文件)
gcc:: gcc -c .s -o .o
链接阶段:
g++:: g++ Link_file_names -o *.o
gcc:: gcc .o -o
通过查看生成的makefile文件,可以观察到,使用的是,gcc编译的,故而该错误可以通过更改c++源文件的后缀名来消除,所以只需要更改后缀名称即可,