博客
关于我
linux下c++编程环境搭建,运行过程以及调试
阅读量:782 次
发布时间:2019-03-25

本文共 2325 字,大约阅读时间需要 7 分钟。

安装g++环境

安装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与g++的区别

gcc是GNU C编译器,用于编译C或C++代码,但通常我们使用g++来编译C++程序。虽然gcc可以编译C++代码,但它无法自动链接C++程序所需的库文件,而g++可以自动生成所需的依赖。

编写一个简单的C++程序

以下是一个简单的C++程序示例(存储在myfirst.cpp文件中):

// myfirst.cpp - 显示消息#include 
using 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?

c/c++运行流程分解

在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文件)所需的功能说明,头文件本身不参与编译,但其内容被多个源文件引用。我应该将常量、函数声明放置在头文件中,而不要在头文件中定义这些内容。以下是头文件的三大例外:

  • 常量的定义
  • 内联函数(inline)的定义
  • 类(class)的定义
  • 分离式编译

    以下是一个分离式编译的示例,分为三个文件:

  • Circle.h:头文件
  • #ifndef CIRCLE_H#define CIRCLE_Hclass Circle {private:    double r;public:    Circle();    Circle(double R);    double Area();};#endif
    1. Circle.cpp:源文件
    2. #include "Circle.h"#include 
      using namespace std;Circle::Circle() { this->r = 5.0;}Circle::Circle(double R) { this->r = R;}double Circle::Area() { return 3.14 * r * r;}// 其他代码
      1. main.cpp:主程序文件
      2. #include "Circle.h"#include 
        using 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是用于自动化编译的重要工具,特别适用于大型项目。大部分项目都需要将源文件分为多个文件,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调试

        GDB(GNU Debugger)是Linux下的强大调试工具。以下是使用GDB的示例:

      3. 编译并添加调试信息:

        g++ -g funcuse.c -o debug
      4. 启动GDB:

        gdb debug
      5. 使用GDB调试:

        (gdb) list 3(gdb) break 5(gdb) run(gdb) continue(gdb) whatis i(gdb) print i(gdb) display i(gdb) step(gdb) finish
      6. 通过GDB,我可以在程序执行过程中设置断点,观察变量值,单步执行代码文件。

    转载地址:http://lesuk.baihongyu.com/

    你可能感兴趣的文章
    Openlayers高级交互(4/20):手绘多边形,导出KML文件,可以自定义name和style
    查看>>
    Openlayers高级交互(5/20):右键点击,获取该点下多个图层的feature信息
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    Openlayers高级交互(9/20):编辑图形(放缩、平移、变形、旋转),停止编辑
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    Openmax IL (二)Android多媒体编解码Component
    查看>>
    OpenMCU(一):STM32F407 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(三):STM32F103 FreeRTOS移植
    查看>>
    OpenMCU(二):GD32E23xx FreeRTOS移植
    查看>>
    OpenMCU(五):STM32F103时钟树初始化分析
    查看>>
    OpenMCU(四):STM32F103启动汇编代码分析
    查看>>
    OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
    查看>>
    OpenMMLab | AI玩家已上线!和InternLM解锁“谁是卧底”新玩法
    查看>>
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>