`
weihe6666
  • 浏览: 436184 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux-C and C++编译调试

阅读更多
在编译之前我们需要在系统里安装G++ GCC,它们就是Linux下的C++/C的编译器。代码如下
代码:

sudo apt-get install build-essential
sudo apt-get install gcc
sudo apt-get install g++

好,现在我们在文本编辑器里写一个C的简单的程序(好像所有学习C或者C++的书都会出现)
代码:

#include <stdio.h>
int main()
{
    printf("Hello,World!\n");
    return 0;
}


现在存盘为Hello.c,打开你的终端,并在文件当前目录输入:
代码:

gcc Hello.c -o hello  

编译时可能会出现如下警告:no newline at and of file ,只有在文件结尾添加一个新行就好了。
然后在终端中输入 ./hello ,你就能在终端中看到程序运行结果了。

下面来说下C++是如何编译的
写程序(不用我多说了吧)
代码:

#include <iostream>
using namespace std;
int main()
{
    cout<<"Hello,World!\n"<<endl;
    return 0;
}

存盘为Hello.cpp
使用gcc编译??? 不对,这里我们使用g++来编译C++程序
代码:

g++ Hello.cpp -o hello


编译多个文件我们怎么办??? 来看下面出了三个文件Hello.h, Hello.cpp, MyFirst.cpp
代码:
//file_NO1:Hello.h
class Hello {     
public:
      Hello();
     int Display();
};
//file_NO2:Hello.cpp
#include <iostream>
#include "Hello.h"
using namespace std;
Hello::Hello()
{
}
int Hello::Display()
{
    cout<<"Hello,World!\n"<<endl;
     return 0;
}
//file_NO3:MyFirst.cpp
#include <iostream>
#include "Hello.cpp"
int main()
{
    Hello theHello;
    theHello.Display();
    return 0;
}

在g++中有一个参数-c 可以只编译不连接,那么我们就可以按如下顺序编译文件,
代码:

g++ -c Hello.cpp -o Hello.o
g++ -c MyFirst.cpp -o MyFirst.o
g++ MyFirst.o Hello.o -o MyFirst

你是否会问,如果是一个项目的话,可能会有上百个文件,这样的编译法,人不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发都白了,呵呵,所以我们要把上述的编译过程写进以下一个文本文件中:
Linux下称之为makefile

#这里可以写一些文件的说明
MyFirst: MyFirst.o hello.o
g++ MyFirst.o hello.o -o MyFirst
Hello.o:Hello.cpp
g++ -c Hello.cpp -o Hello.o
MyFirst.o:MyFirst.cpp
g++ -c MyFirst.cpp -o MyFirst.o

存盘为MyFirst,在终端输入:make MyFist ,程序出现了错误可是所有程序员共同的敌人,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序进行必要的调试是一个好主意,那我们怎么来调试程序呢,看下面:

gdb ./文件名

以下为调试状态下的可以用到的命令(可以仅输入单词的输入,如break可简为b),尖括号中为说明
list <显示源代码>
break 行号 <设置断点>
run <运行程序>
continue <继续从断点处执行>
print 变量 <调试时查看变量的值>
del 行号 <删除断点>
step <单步执行,可跟踪到函数内部>
next <单步执行,不可跟踪到函数内部>
quit <退出>
分享到:
评论

相关推荐

    arm-linux-gcc编译选项.pdf

    ARM Linux下的GCC编译器是针对ARM处理器架构的GNU编译器集合,它能够处理C、C++、Objective-C等编程语言的源代码,最终编译生成适合ARM处理器的机器代码。在进行嵌入式Linux开发时,GCC编译器扮演了至关重要的角色,...

    Linux期末作业-关于Linux-C语言gcc编译gdb调试、shell脚本编程

    在Linux期末作业中,可能包括使用C语言编写程序,使用GCC编译并解决编译错误,利用GDB进行调试,以及编写简单的Shell脚本来实现自动化任务。这些技能是Linux系统管理和软件开发的基础,对于理解操作系统的工作原理和...

    arm-linux-gcc-5.4.0交叉编译工具.rar

    ARM-Linux-GCC工具链包含了预编译的C和C++编译器、链接器以及其他必要的工具,如汇编器和调试器,它们都针对ARM处理器进行了优化。 ARM-Linux-GCC 5.4.0 版本包含以下组件: 1. **GCC (GNU Compiler Collection)**...

    arm-vfp-linux-gnu-4.3.2交叉编译工具链及安装

    ./configure --target=arm-linux-gnueabi --host=x86_64-linux-gnu --prefix=/path/to/install --enable-languages=c,c++ --disable-multilib ``` 其中,`--target`指定了目标体系结构,`--host`是构建工具链的...

    arm-fsl-linux-gnueabi-交叉编译工具链

    2. **编译器** (cc/g++): 编译器如gcc或g++,将预处理过的C/C++源代码转化为汇编代码。 3. **汇编器** (as): 汇编器将汇编代码转化为机器语言的二进制目标文件。 4. **链接器** (ld): 链接器负责合并多个目标文件...

    arm-linux-gcc交叉编译工具2

    在嵌入式系统开发中,尤其是在Linux环境下针对ARM架构的设备进行编程时,常常需要使用到`arm-linux-gcc`交叉编译工具。这个工具允许我们在一个非ARM平台(如x86架构的个人电脑)上构建适用于ARM处理器的软件。下面将...

    arm-linux-gnueabihf.tar.gz arm-linux-gnueabihf编译链

    这里的`gcc`代表GNU Compiler Collection,是C、C++和其他语言的编译器。版本号`6.2.1-2016.11`表明这是2016年11月发布的GCC 6.2.1版本。 5. **实测可用**: 提供者提到该编译链已经在德克萨斯仪器的OK系列(例如...

    arm-linux-gcc-4.3.2(交叉编译链).zip

    5. **使用示例**:教程可能会给出一个简单的C或C++程序,演示如何使用arm-linux-gcc-4.3.2编译并生成适用于ARM设备的可执行文件。 6. **调试和问题解决**:可能包含在遇到错误时如何调试和查找解决方案的提示,如...

    Linux Eclipse C++项目编译与调试.docx

    ### Linux Eclipse C++项目编译与调试 #### 一、前言 在当前的软件开发环境中,许多C++开发者仍然采用传统的文本编辑器配合gdb命令的方式进行编码和调试,这种方式虽然简单直接,但对于大型项目而言,其低效性与...

    arm-linux-gcc-4.3.3(交叉编译链).zip

    这里,4.3.3是指GCC(GNU Compiler Collection)的一个特定版本,它包含了一系列的编译器,如C、C++、Fortran等,以及链接器和其他工具。 交叉编译链通常包括以下组件: 1. **预处理器**(cpp):处理源代码中的宏...

    arm交叉编译工具:arm-linux-gcc 4.5.1

    它包含了C、C++、Fortran等语言的编译器,能够将源代码编译为针对ARM处理器的二进制代码。4.5.1是这个工具链的一个版本号,代表了其功能特性和优化程度。 **2. 交叉编译的基本概念** 交叉编译是指在一种架构的机器...

    linux-arm-gcc-4.9.2交叉编译工具

    这个版本的GCC(GNU Compiler Collection)是4.9.2,是一个稳定且功能丰富的编译器,它包含了C、C++、Fortran、Ada和Go等编程语言的前端。交叉编译是解决不同架构之间编译问题的关键技术,尤其在嵌入式系统开发中,...

    aarch64-linux-android-4.9.rar

    然而,由于Android操作系统基于Linux内核,其应用程序大多用C/C++编写,这就涉及到一个关键的技术环节——交叉编译。本文将深入探讨aarch64-linux-android-4.9这一针对Android平台的64位架构(aarch64)的交叉编译...

    mips-linux-gnu 4.8.4

    这个工具链是为开发MIPS架构上的Linux应用程序而设计的,它包含了编译、链接以及其他必要的工具,使得开发者能够在非MIPS平台(如Ubuntu 9.10)上构建和调试MIPS平台的应用程序。 MIPS(Microprocessor without ...

    arm-linux-gcc-4.5.1编译工具

    总的来说,ARM Linux GCC 4.5.1是嵌入式系统开发中的一个重要工具,尤其适用于需要在ARM处理器上运行C或C++代码的项目。其优化的代码生成和对新C++标准的支持,使其成为开发高效、可靠的嵌入式应用程序的理想选择。...

    arm-linux-gnueabihf 12.0 交叉编译,嵌入式,arm

    - **新功能支持**:随着C++和C语言标准的更新,新版本的GCC会支持更多新特性。 - **错误修复**:新版本修复了已知的问题,提高了编译的稳定性和可靠性。 - **更好的库兼容性**:更新的GCC与最新的库和框架更兼容,有...

    arm-none-linux-gnueabi-linux.zip

    5. **调试与部署**:通过`arm-none-linux-gnueabi-gdb`进行远程调试,完成程序的调试后,将编译好的二进制文件传输到目标硬件上运行。 五、参考资源 对于如何具体搭建和使用这个工具链,可以参考提供的链接:...

    aarch64-linux-android-4.9

    总之,“aarch64-linux-android-4.9”是Android NDK的一个关键部分,它提供了针对64位ARM设备的交叉编译能力,使得开发者可以在Android Studio环境中高效地开发和调试原生代码,进一步丰富和扩展Android应用的功能和...

    arm-linux-gcc-4.4.3

    对于C语言项目,通常使用`arm-linux-gcc`来编译源文件;对于C++项目,则使用`arm-linux-g++`。 5. **调试与优化**:可以使用`-g`选项添加调试信息,便于使用GDB进行远程调试。而`-O2`或`-O3`则用于开启优化,提高...

Global site tag (gtag.js) - Google Analytics