📜  debian 10 gcc 编译 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:40:41.143000             🧑  作者: Mango

编译程序使用的环境:debian 10 + gcc

简介

本文将介绍在 Debian 10 系统上使用 gcc 编译程序的基本方法及注意事项。

gcc 是 GNU Compiler Collection,是一款开源的 C、C++、Fortran 等语言的编译器。在 Linux 系统中,gcc 是最常用的编译器之一。本文将通过实例演示如何使用 gcc 编译程序,并提供一些常见编译错误的解决方法。

编译 C 程序
1. 编写 C 程序

在本地新建一个文件,在文件中输入以下代码:

#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}
2. 编译 C 程序

输入以下命令进行编译:

gcc -o hello hello.c

其中,-o 后面跟着的是编译后生成的可执行文件的名称,hello.c 是源文件名。

如果编译无误,会在当前目录下生成一个名为 hello 的文件。执行该文件会输出 "Hello world!"。

3. 常见编译错误及解决方法

错误 1:undefined reference to `main'

/tmp/ccNMeX9F.o: In function `__libc_csu_init':
(.text+0x98): undefined reference to `main'
collect2: error: ld returned 1 exit status

这个错误是由于缺少 main 函数引起的。请检查源文件中是否存在 main 函数。

错误 2:fatal error: stdio.h: No such file or directory

hello.c:1:10: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
          ^~~~~~~~
compilation terminated.

这个错误是由于缺少头文件引起的。请确保安装了 gcc 的依赖库 libc6-dev:

sudo apt-get install libc6-dev
编译 C++ 程序
1. 编写 C++ 程序

在本地新建一个文件,在文件中输入以下代码:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello world!" << endl;
    return 0;
}
2. 编译 C++ 程序

输入以下命令进行编译:

g++ -o hello hello.cpp

其中,-o 后面跟着的是编译后生成的可执行文件的名称,hello.cpp 是源文件名。

如果编译无误,会在当前目录下生成一个名为 hello 的文件。执行该文件会输出 "Hello world!"。

3. 常见编译错误及解决方法

错误 1:undefined reference to `std::cout'

undefined reference to `std::cout'

这个错误是由于缺少 iostream 头文件引起的。请确保在源文件中包含 iostream 头文件:

#include <iostream>

错误 2:'namespace std' used without qualification

hello.cpp:4:5: error: 'namespace' is not allowed as a struct member
    4 |     using namespace std;
      |     ^~~~~~

这个错误是由于在结构体成员中使用了 using namespace std; 引起的。请将 using namespace std; 放在 main 函数外面。