主页

索引

模块索引

搜索页面

8.4. g++命令

  • g++ 是 GNU Compiler Collection (GCC) 中专门用于编译 C++ 程序的命令。它支持多种编译选项和标准库,适用于跨平台的 C++ 程序开发和编译。

主要特点和功能:

- **C++ 支持**:`g++` 提供了对 C++ 标准的全面支持,包括 C++98、C++11、C++14、C++17 等多个标准。
- **优化能力**:`g++` 支持丰富的优化选项,可以根据需要提高代码的执行效率和性能。
- **标准兼容**:`g++` 遵循 C++ 标准,并能够生成符合标准的可执行代码,保证了代码的可移植性和兼容性。
- **库支持**:`g++` 能够链接多种标准库和第三方库,包括 STL (Standard Template Library)、Boost 等,为 C++ 程序提供强大的功能和扩展性。
- **开源和跨平台**:`g++` 是开源软件,可以在多种操作系统上运行和使用,包括 Linux、macOS、Windows 等,适用于不同的开发环境和需求。

8.4.1. g++gcc 命令的不同点

虽然 g++gcc 都属于 GNU Compiler Collection (GCC) 的一部分,但它们在编译和处理源代码时有几个主要的区别:

1. **语言支持**:
   - `gcc` 主要用于编译 C 语言程序,虽然也可以编译 C++ 程序,但是不会自动链接 C++ 标准库。
   - `g++` 则专门用于编译 C++ 程序,会自动链接 C++ 标准库和其他必要的库文件。

2. **默认标准**:
   - `gcc` 默认使用 C 标准(如 C89、C99 等)进行编译。
   - `g++` 默认使用 C++ 标准(如 C++98、C++11 等)进行编译。

3. **链接库**:
   - `gcc` 不会自动链接 C++ 标准库,需要手动添加 `-lstdc++` 选项来链接。
   - `g++` 在编译 C++ 程序时会自动链接 C++ 标准库和其他必要的库文件。

4. **文件扩展名**:
   - `gcc` 接受 `.c` 和 `.cpp` 文件作为输入。
   - `g++` 接受 `.cpp` 和 `.cc` 文件作为输入。

5. **编译选项**:
   - `gcc` 和 `g++` 有部分共享的编译选项(如 `-o`、`-g` 等),但也有针对 C 或 C++ 特定的选项。

6. **语言特性**:
   - `gcc` 会根据输入文件的扩展名自动确定使用的编译器(`cc1` 或 `cc1plus`)。
   - `g++` 只使用 C++ 编译器 `cc1plus`,无论输入文件的扩展名是 `.c` 还是 `.cpp`。

g++ 在选项使用上与 gcc 不同的点:

默认标准:
    g++ 默认使用 C++ 标准,如 C++98、C++11、C++14 等,而不是像 gcc 默认使用 C 标准(如 C89、C99)。

自动链接标准库:
    g++ 在编译 C++ 程序时会自动链接 C++ 标准库(libstdc++),而 gcc 需要手动添加 -lstdc++ 选项来链接 C++ 标准库。

编译器选择:
    g++ 会强制使用 C++ 编译器 cc1plus,而 gcc 根据输入文件的扩展名选择使用 cc1(C 编译器)或 cc1plus(C++ 编译器)。

文件扩展名:
    g++ 只接受 .cpp 和 .cc 等 C++ 源文件扩展名作为输入,不接受 .c 扩展名的纯 C 源文件。

编译选项:
    g++ 提供了专门针对 C++ 的优化选项和警告控制选项,例如用于模板实例化优化的选项 -ftemplate-depth=,以及控制异常处理方式的 -fno-exceptions 等选项。

链接行为:
    g++ 在链接过程中会自动添加 C++ 运行时支持(如异常处理和 RTTI 支持),而 gcc 需要手动添加 -lstdc++ 和其他必要的选项来完成这些操作。

特定于 C++ 的警告选项:
    g++ 提供了一些特定于 C++ 的警告选项,如 -Woverloaded-virtual、-Wconversion-null 等,用于检查和控制 C++ 代码的质量和风格。

主页

索引

模块索引

搜索页面