程序的编译和调试

gcc编译器

gcc(GNU Compiler Collection)是GNU推出的多平台编译器,可将C、C++源程序编译并链接成可执行文件(.exe),gcc编译器支持以下后缀:

  • .c c语言源代码

  • .h 程序所包含的头文件

  • .i 已经预处理过的C源代码文件

  • .s 汇编语言源代码文件

  • .o 编译后的目标文件

gcc –o hello hello.c
-o 输出可执行文件
-c 只要求编译器输出目标代码(.o文件),而不必输出可执行文件
-g 用于调试
./hello 查看输出结果(此处我们输出的可命名文件名为hello, 如果不指定输出文件名, 则编译器将默认生成a.out的可执行文件)
当我们的代码在编译调试后进行修改,则我们需要重新生成修改后的执行文件。

程序调试

利用__FILE__,LINE,__FUNCTION__实现代码跟踪调试

#include <stdio.h>

int main(int argc,char **argv)
{

   printf("%s,%s,%d\n",__FILE__,__FUNCTION__,__LINE__);

   return 0;

}
  • __FILE____FUNCTION____LINE__ 是 C/C++ 中的预定义宏,用于获取当前源代码所在的文件名、函数名和行号。

    1. __FILE__:这个宏会在编译时被替换为当前源代码所在的文件的文件名,包括文件的完整路径。例如,printf("__FILE__: %s\n", __FILE__); 会输出当前源文件的路径和文件名。

    2. __FUNCTION__:这个宏会在编译时被替换为它所在的函数的函数名。注意,该宏在 C++ 中支持,但在 C 中并不是标准的预定义宏。例如,printf("__FUNCTION__: %s\n", __FUNCTION__); 会输出当前所在的函数名。

    3. __LINE__:这个宏会在编译时被替换为当前代码所在的行号。例如,printf("__LINE__: %d\n", __LINE__); 会输出当前代码所在的行号。

  • 这些预定义宏在调试和错误追踪中非常有用,可以帮助程序员了解代码执行的上下文信息,方便定位问题所在。

C语言基础

一个程序应当包含两部分内容:

  • 对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构

  • 对操作的描述。即操作步骤,也就是算法
    在这里插入图片描述

算法的基本概念
  • 做任何事情都有一定的步骤。步骤要按照一定的顺序进行,缺一不可,次序也不能错。广义的说,为解决一个问题而采取的方法和步骤就称为算法。
  • 在这里插入图片描述

思考与总结

总结

  • gcc编译器的使用

  • 程序的调试

  • C语言基础介绍

思考:

  • gcc做为一个交叉编译器,如何生成ARM平台的执行程序?
    • GCC(GNU Compiler Collection)是一个开源的编程语言编译器套件,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。它不仅可以编译代码到本地平台,还可以进行交叉编译,将代码编译为在不同的目标平台上运行的执行程序。

    • 要生成ARM平台的执行程序,需要进行ARM的交叉编译设置。以下是在Linux操作系统上使用GCC进行ARM交叉编译的基本步骤:

      1. 安装ARM交叉编译工具链:
        首先,您需要安装针对ARM平台的交叉编译工具链。这些工具链包括ARM架构的交叉编译器、链接器和库文件。您可以从ARM官方网站或第三方供应商获取预编译的工具链,也可以自行构建工具链。

      2. 设置环境变量:
        在交叉编译之前,需要设置环境变量,告诉GCC使用特定的交叉编译工具链。假设您的ARM交叉编译器安装在/path/to/arm-toolchain目录下,可以执行以下命令设置环境变量:

        export CC=/path/to/arm-toolchain/bin/arm-linux-gcc
        export CXX=/path/to/arm-toolchain/bin/arm-linux-g++
        export LD=/path/to/arm-toolchain/bin/arm-linux-ld
        
      3. 编写并编译代码:
        编写适用于ARM平台的代码,保存为 .c.cpp 文件。然后使用设置好的交叉编译器进行编译。例如:

        arm-linux-gcc -o output_filename input_filename.c
        

        或者使用C++代码编译时:

        arm-linux-g++ -o output_filename input_filename.cpp
        
      4. 运行生成的执行程序:
        将生成的可执行文件传输到目标ARM平台上,并在目标平台上运行它。

      • 注意事项:

        • 在交叉编译时,要确保代码中不使用依赖于本地平台的特定库或功能。
        • 如果您需要链接其他库,请确保这些库是为ARM平台交叉编译的版本。
        • 在交叉编译时,需要根据目标平台的需求进行相应的优化和配置。可以使用GCC的一些编译选项来设置目标平台和优化级别。
      • 交叉编译是一个复杂的过程,需要根据具体的目标平台和应用场景进行设置。如果您是初次进行ARM交叉编译,建议查阅相关文档和教程,或参考特定的硬件和系统提供商的指南,以确保正确设置和生成适用于ARM平台的执行程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DevGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值