`
李楚男
  • 浏览: 118506 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在Ubuntu下编译 C++与Fortran

 
阅读更多
GCC 是 GNU 编译器集合(GNU Compiler Collection)的首字母缩写词。GNU 编译器集合包含 C,C++,Objective-C,Fortran,Java 和 Ada 的前端以及这些语言对应的库(libstdc++,libgcj,……)。

前面我们只涉及到 C 语言,那么如何用 gcc 编译其他语言呢?本节将简单介绍 C++ 和 Fortran 编译的例子。

首先我们尝试编译简单的 C++ 的经典程序 Hello world:

#include <iostream>
int main(int argc,char *argv[])
{
    std::cout << "hello, world" << std::endl;
    return 0;
}

将文件保存为‘hello.cpp’,用 gcc 编译,结果如下:
$ gcc -Wall hello.cpp -o hello /tmp/cch6oUy9.o: In function `__static_initialization_and_destruction_0(int, int)': hello.cpp:(.text+0x23): undefined reference to `std::ios_base::Init::Init()' /tmp/cch6oUy9.o: In function `__tcf_0': hello.cpp:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()' /tmp/cch6oUy9.o: In function `main': hello.cpp:(.text+0x8e): undefined reference to `std::cout' hello.cpp:(.text+0x93): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /tmp/cch6oUy9.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status

出错了!!而且错误还很多,很难看懂,这可怎么办呢?在解释之前,我们先试试下面的命令:
$ gcc -Wall hello.cpp -o hello -lstdc++

噫,加上-lstdc++选项后,编译竟然通过了,而且没有任何警告。运行程序,结果如下:
$ ./hello hello, world

通过上节,我们可以知道,-lstdc++ 选项用来通知链接器链接静态库 libstdc++.a。而从字面上可以看出,libstdc++.a 是C++ 的标准库,这样一来,上面的问题我们就不难理解了──编译 C++ 程序,需要链接 C++ 的函数库 libstdc++.a。

编译 C 的时候我们不需要指定 C 的函数库,为什么 C++ 要指定呢?这是由于早期 gcc 是指 GNU 的 C 语言编译器(GNU C Compiler),随着 C++,Fortran 等语言的加入,gcc的含义才变化成了 GNU 编译器集合(GNU Compiler Collection)。C作为 gcc 的原生语言,故编译时不需额外的选项。

不过幸运的是,GCC 包含专门为 C++ 、Fortran 等语言的编译器前端。于是,上面的例子,我们可以直接用如下命令编译:
$ g++ -Wall hello.cpp -o hello

GCC 的 C++ 前端是 g++,而 Fortran 的情况则有点复杂:在 gcc-4.0 版本之前,Fortran 前端是 g77,而gcc-4.0之后的版本对应的 Fortran 前端则改为 gfortran。下面我们先写一个简单的 Fortran 示例程序:

C     Fortran 示例程序
      PROGRAM HELLOWORLD
      WRITE(*,10)
   10 FORMAT('hello, world')
      END PROGRAM HELLOWORLD

将文件保存‘hello.f’,用 GCC 的 Fortran 前端编译运行该文件
$ gfortran -Wall hello.f -o hello $ ./hello hello, world

我们已经知道,直接用 gcc 来编译 C++ 时,需要链接 C++ 标准库,那么用 gcc 编译 Fortran时,命令该怎么写呢?
$ gcc -Wall hello.f -o helloworld -lgfortran -lgfortranbegin

注意:上面这条命令与 gfortran 前端是等价的(g77 与此稍有不同)。其中库文件 libgfortranbegin.a (通过命令行选项 -lgfortranbegin 被调用) 包含运行和终止一个 Fortran 程序所必须的开始和退出代码。库文件 libgfortran.a 包含 Fortran 底层的输入输出等所需要的运行函数。

对于 g77 来说,下面两条命令是等价的(注意到 g77 对应的 gcc 是 4.0 之前的版本):
$ g77 -Wall hello.f -o hello $ gcc-3.4 -Wall hello.f -o hello -lfrtbegin -lg2c

命令行中的两个库文件分别包含 Fortran 的开始和退出代码以及 Fortran 底层的运行函数。
分享到:
评论

相关推荐

    Ubuntu 11.10 搭建编译环境

    在Ubuntu 11.10操作系统中搭建一个完整的编译环境是开发人员和系统管理员的基础工作,这通常涉及到安装一系列工具和软件包,以便能够从源代码构建应用程序。Ubuntu 11.10是一个较旧的版本,但其构建过程与现代版本的...

    搭建Ubuntu下编译环境.docx

    在Ubuntu操作系统中搭建编译环境是进行软件开发的基础工作,主要涉及到C或C++语言的编译工具。本文将详细讲解如何在Ubuntu上配置GCC编译器和Java环境,并安装Eclipse集成开发环境以及C/C++插件。 首先,安装Ubuntu...

    ubuntu下intel编译的安装说明

    本文将详细讲解如何在Ubuntu下安装和使用Intel编译器。 首先,你需要确保系统是最新的。打开终端,输入以下命令进行更新: ```bash sudo apt update sudo apt upgrade ``` 接下来,添加Intel软件包的官方仓库。访问...

    ubuntu下交叉编译环境压缩包5.4.0

    在Linux操作系统,特别是Ubuntu环境下,交叉编译是一项重要的技能,特别是在开发嵌入式系统时,因为这些系统往往没有足够的资源来运行完整的编译工具链。本文将深入探讨“ubuntu下交叉编译环境压缩包5.4.0”的相关...

    不联网,在Ubuntu下安装GCC

    "不联网,在 Ubuntu 下安装 GCC" GCC(GNU Compiler Collection)是 Unix 和类 Unix 操作系统中用的一个编译器套件,支持多种语言,包括 C、C++、Fortran、Java 等。GCC 能够编译这些语言的程序,并且可以根据需要...

    Ubuntu 18.04 gcc make g++ vim cmake 离线安装包.zip

    在Ubuntu 18.04操作系统中,开发者和系统管理员经常需要使用一系列的工具来编译、构建和管理软件项目。这些工具包括GCC(GNU Compiler Collection)、make、g++(GCC的C++编译器)、vim(一个强大的文本编辑器)以及...

    ubuntu22.04下gcc-4.7编译的mips32交叉编译器编译的qt4.7.1库文件

    在本文中,我们将深入探讨如何在Ubuntu 22.04操作系统上,...同时,对于Ubuntu 22.04,通常推荐使用与操作系统版本匹配的GCC版本,但在这种情况下,由于目标是MIPS32,所以选择了GCC 4.7,因为它在当时支持MIPS架构。

    gcc g++ tcl make ubuntu安装编译环境

    在Ubuntu操作系统中,GCC(GNU Compiler Collection)和G++是两个非常重要的编译工具,用于C和C++编程语言的源代码编译。GCC不仅支持C和C++,还支持Fortran、Ada、Go等多种编程语言。G++是GCC的一部分,专门处理C++...

    gcc-c++.zip

    GCC是一个开源的编译器集合,主要用于C、C++、Fortran、Objective-C等多种编程语言的编译,而C++是C语言的扩展,提供面向对象编程功能。当我们谈到“gcc-c++.zip”时,我们可以理解为这个压缩包包含了安装和使用GCC ...

    Ubuntu 1804 server Gcc 7.5 离线安装包 deb

    GCC 7.5是GCC的第七个主要版本,包含了许多改进和优化,对C、C++、Fortran等编程语言的支持更为完善,性能也有所提升。在Ubuntu 18.04上安装GCC 7.5可以为开发者提供更先进的编译工具,尤其是对于需要最新编译器特性...

    ubuntu20.04.1对应gcc-9.3.0完整安装包

    在Ubuntu 20.04.1 LTS (Focal Fossa)系统中,GCC(GNU Compiler Collection)是用于编译C、C++、Fortran、Ada等编程语言的开源编译器套件。GCC 9.3.0是GCC的一个稳定版本,提供了许多性能优化和新特性。本文将详细...

    ubuntu20.04对应的gdb安装包

    这个"ubuntu20.04-gdb安装包"就是为了满足那些需要在没有网络连接的环境下安装GDB的需求而准备的。 GDB的主要功能包括: 1. **设置断点**:在程序的特定位置暂停执行,以便检查当时的变量状态和程序流程。 2. **...

    ubuntu18.04可用的g++7.5.0

    在Ubuntu 18.04系统中,开发者经常需要使用GCC(GNU Compiler Collection)和G++,它们是C和C++编程语言的标准编译器。GCC不仅包含C++编译器,还包括C、Fortran、Ada和Go等多种语言的编译器。而G++是GCC的一部分,...

    ubuntu20.04-gcc11.2源码依赖和教程

    在本文中,我们将深入探讨如何在Ubuntu 20.04上编译和安装GCC 11.2源代码,以及为什么需要从源代码编译。GCC(GNU Compiler Collection)是GNU项目的一部分,是一个广泛使用的开源编译器系统,支持多种编程语言,...

    OpenMC程序的编译与安装1

    本文主要针对OpenMC程序(0.10.0版本)在Ubuntu 18.04操作系统上的编译与安装进行详述,涵盖两种方法:conda-forge安装法和源码编译安装法。 **3.1 编译方法介绍** ### 3.1.1 Conda-forge安装方法 1. **下载与...

    ubuntu10.10下测试gcc,gfortran编译器的helloworld工程

    在Ubuntu 10.10操作系统中,GCC(GNU Compiler Collection)是一个强大的开源编译器套件,主要用于C、C++、Objective-C、Fortran、Ada以及Go等编程语言的编译。GFortran是GCC的一部分,专为Fortran语言提供服务。本...

    Fortran 入门教程之Hello world.pdf

    3. **Fortran编译器的选择与安装** 4. **Fortran程序的基本结构** 5. **如何编写并运行一个简单的Fortran程序** #### Fortran简介 Fortran(Formula Translation)是一种高级编程语言,最初由IBM公司在1950年代...

    c,c++执行命令c,c++执行命令

    在Linux环境下编译和执行C/C++程序是软件开发中非常常见的操作。本文将详细介绍如何在Linux系统中使用gcc和g++编译器来编译并运行C/C++程序。 ### 一、编译器简介 #### GCC (GNU Compiler Collection) GCC 是一套...

    ubuntu下gcc编程入门收藏

    在 Ubuntu 系统中安装 GCC 和其他相关工具之前,首先需要确保系统中已经安装了基本的编译环境。这可以通过以下命令来完成: ```bash sudo apt-get install build-essential ``` `build-essential` 包含了一系列...

Global site tag (gtag.js) - Google Analytics