下面是一个名字为hello.cpp的c++代码文件:
/* hello.cpp */
#include <iostream>
int main(int argc,char *argv[])
{
std::cout << "hello!!" << std::endl;
return(0);
}
在linux中执行如下命令编译该文件:
g++ hello.cpp
编译器 g++ 通过检查命令行中指定的文件的后缀名cpp可识别其为 C++ 源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。
g++的参数有:-o -l -c -E -S
(1)-o参数一般用来修改生成应用程序的名称,如下命令生成名字为hello的可执行程序:
g++ hello.cpp -o hello
(2)-l参数通过添加lib前缀和.so后缀,添加编译代码所需要链接的库文件,在标准库中查找该库文件,如下代码表示添加libopencv_highhui.so库文件:
g++ hello.cpp -o hello -lopencv_highhui
(3)-c参数用来告诉编译器编译源代码但不要执行链接,输出结果为对象文件。文件默认名与源码文件名相同,只是将其后缀变为 .o。如下代码表示生成hello.o文件:
g++ -c hello.cpp
(4)-E参数表示使 g++ 将源代码用编译预处理器处理后不再执行其他动作。下面的命令预处理源码文件 hello.cpp 并将结果显示在标准输出中:
g++ -E hello.cpp
(5)-S参数表示使编译器将程序编译成汇编语言,输出汇编语言代码而后结束。下面的命令将由 C++ 源码文件生成汇编语言文件 hello.s:
g++ -S hello.cpp
(6)编译多个.cpp文件:下面代码将三个.cpp文件链接到一个可执行文件中,并命名为hello:
g++ hello1.cpp hello2.cpp hello3.cpp -o hello