本文共 2325 字,大约阅读时间需要 7 分钟。
安装g++环境在Linux系统中非常简单。安装两个RPM包即可搞定。
sudo yum install libstdc++-devel-4.4.5-6.i686.rpmsudo yum install gcc-c++-4.4.5-6.i686.rpm
安装完成后可以验证g++的版本:
g++ -v
gcc是GNU C编译器,用于编译C或C++代码,但通常我们使用g++来编译C++程序。虽然gcc可以编译C++代码,但它无法自动链接C++程序所需的库文件,而g++可以自动生成所需的依赖。
以下是一个简单的C++程序示例(存储在myfirst.cpp文件中):
// myfirst.cpp - 显示消息#includeusing namespace std;int main() { cout << "Come up and C++ me some time."; cout << endl; cout << "You won't regret it!" << endl; return 10;}
在命令行窗口中编译:
g++ -o test1 test.cpp
-o test1 test.cpp
命令会将test.cpp编译生成test1可执行文件。若没有指定-o
选项,默认会生成a.out文件。
运行可执行文件:
./a.out
查看main函数的返回值:
echo?
在Linux中,C/C++程序的运行流程包括以下几个阶段:
预处理(Preprocessing)结果生成.i
文件:
g++ -E funcuse.c -o e.i
编译(Compiling)结果生成.s
文件:
g++ -S e.i -o e.s
可以合并为:
g++ -s e.i -o e.s
汇编(Assembling)生成目标文件(.o
文件):
g++ -c e.s -o e.o
链接(Linking)生成可执行文件:
g++ e.o -o result
运行(Executing)运行结果文件:
./result
在Linux中运行程序之前通常需要使用./
指定程序的路径,除非程序已被添加到PATH
环境变量中。
头文件(Header Files)通常用于包含其他文件(.cpp文件)所需的功能说明,头文件本身不参与编译,但其内容被多个源文件引用。我应该将常量、函数声明放置在头文件中,而不要在头文件中定义这些内容。以下是头文件的三大例外:
以下是一个分离式编译的示例,分为三个文件:
#ifndef CIRCLE_H#define CIRCLE_Hclass Circle {private: double r;public: Circle(); Circle(double R); double Area();};#endif
#include "Circle.h"#includeusing namespace std;Circle::Circle() { this->r = 5.0;}Circle::Circle(double R) { this->r = R;}double Circle::Area() { return 3.14 * r * r;}// 其他代码
#include "Circle.h"#includeusing namespace std;int main(int argc, char *argv[]) { Circle c(3); cout << "Area = " << c.Area() << endl; return 0;}
编译命令:
g++ -c Circle.cpp -o Circle.og++ -c main.cpp -o main.og++ main.o Circle.o -o main
运行程序:
./main
Makefile是用于自动化编译的重要工具,特别适用于大型项目。大部分项目都需要将源文件分为多个文件,Makefile可以帮助我们自动编译并生成最终可执行文件。
# 生成所有源文件all: g++ -c main.cpp -o main.o g++ -c Circle.cpp -o Circle.o g++ main.o Circle.o -o main# 清理构建文件clean: rm -rf main.o Circle.o main
使用命令:
makemake clean
GDB(GNU Debugger)是Linux下的强大调试工具。以下是使用GDB的示例:
编译并添加调试信息:
g++ -g funcuse.c -o debug
启动GDB:
gdb debug
使用GDB调试:
(gdb) list 3(gdb) break 5(gdb) run(gdb) continue(gdb) whatis i(gdb) print i(gdb) display i(gdb) step(gdb) finish
通过GDB,我可以在程序执行过程中设置断点,观察变量值,单步执行代码文件。
转载地址:http://lesuk.baihongyu.com/