美文网首页
22. 编译程序

22. 编译程序

作者: 独木舟的木 | 来源:发表于2019-02-05 20:05 被阅读11次

    [TOC]

    本章内容:通过编译源代码来创建程序。

    编译程序

    编译软件的原因:

    1. 可用性。尽管系统发行版仓库中已经包含了大量的预编译程序,但是一些发行版本不可能包含所有期望的应用。 在这种情况下,得到所期望程序的唯一方式是编译程序源码。
    2. 及时性。虽然一些系统发行版专门打包前沿版本的应用程序,但是很多不是。这意味着,为了拥有一个最新版本的程序,编译是必需的。

    什么是编译?
    编译就是把源码(一个由程序员编写的人类可读的程序描述)翻译成计算机处理器的母语的过程。

    编译的过程:
    高级语言 => 【编译器】 => 汇编语言 => 【汇编器】 => 机器语言

    不是所有的程序都是可编译的。有些脚本语言或解释型语言,如Perl, Python,PHP,Ruby,和许多其它语言不需要编译,可以直接执行。

    脚本语言由一个叫做「解释器」的特殊程序执行。

    编译一个 C 语言

    在 Linux 环境中,普遍使用的 C 编译器叫做 gcc(GNU C 编译器),最初由 Richard Stallman 写出来的。

    # 查看 gcc 编译器是否安装
    $ which gcc
    /usr/bin/gcc
    
    # 显示 gcc 程序简单描述
    $ whatis gcc
    gcc (1)              - GNU project C and C++ compiler
    

    得到源码

    diction 是 GNU 项目下的一个小巧方便的程序,用于检查文本文件的书写质量和样式。

    # 1. 创建 src 目录
    $ mkdir src
    $ cd src
    
    # 2. 使用 ftp 协议下载源码
    $ ftp ftp.gnu.org
    Connected to ftp.gnu.org.
    220 GNU FTP server ready.
    Name (ftp.gnu.org:root): anonymous
    ...
    
    # 跳转到 gnu/diction 目录下
    ftp> cd gnu/diction
    250 Directory successfully changed.
    
    # ls 列出目录下文件会报错:500
    ftp> ls
    500 Illegal PORT command.
    # 解决方法
    ftp> quote pasv
    227 Entering Passive Mode (209,51,188,20,84,170).
    ftp> passive
    Passive mode on.
    
    ftp> ls
    227 Entering Passive Mode (209,51,188,20,107,167).
    150 Here comes the directory listing.
    -rw-r--r--    1 3003     65534       68940 Aug 28  1998 diction-0.7.tar.gz
    -rw-r--r--    1 3003     65534       90957 Mar 04  2002 diction-1.02.tar.gz
    -rw-r--r--    1 3003     65534      141062 Sep 17  2007 diction-1.11.tar.gz
    -rw-r--r--    1 3003     65534         189 Sep 17  2007 diction-1.11.tar.gz.sig
    226 Directory send OK.
    
    # get 命令:把文件从 ftp 服务器复制到本地机器
    ftp> get diction-1.11.tar.gz
    local: diction-1.11.tar.gz remote: diction-1.11.tar.gz
    227 Entering Passive Mode (209,51,188,20,112,178).
    150 Opening BINARY mode data connection for diction-1.11.tar.gz (141062 bytes).
    226 Transfer complete.
    141062 bytes received in 0.74 secs (187.2645 kB/s)
    
    # 退出 ftp
    ftp> bye
    221 Goodbye.
    
    $ ls
    diction-1.11.tar.gz
    
    # 打开文件
    $ tar xzf diction-1.11.tar.gz 
    $ ls
    diction-1.11  diction-1.11.tar.gz
    
    # 显示文件内容
    $ cd diction-1.11/
    $ ls
    config.guess  configure.in  diction.1.in  diction.spec.in  en_GB.po   getopt_int.h  misc.c  nl.po       style.1.in
    config.h.in   COPYING       diction.c     diction.texi.in  getopt1.c  INSTALL       misc.h  README      style.c
    config.sub    de            diction.pot   en               getopt.c   install-sh    NEWS    sentence.c  test
    configure     de.po         diction.spec  en_GB            getopt.h   Makefile.in   nl      sentence.h
    

    构建程序

    大多数程序通过一个简单的,两个命令的序列建立:

    # configure 程序:分析程序建立环境。
    ./configure
    checking build system type... x86_64-unknown-linux-gnu
    checking host system type... x86_64-unknown-linux-gnu
    checking for gcc... gcc
    checking for C compiler default output file name... a.out
    checking whether the C compiler works... yes
    checking whether we are cross compiling... no
    checking for suffix of executables... 
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking for a BSD-compatible install... /usr/bin/install -c
    checking for strerror... yes
    checking for library containing regcomp... none required
    checking for broken realloc... no
    checking for msgfmt... no
    configure: creating ./config.status
    config.status: creating Makefile
    config.status: creating diction.1
    config.status: creating diction.texi
    config.status: creating diction.spec
    config.status: creating style.1
    config.status: creating test/rundiction
    config.status: creating config.h
    

    configure 命令执行后,会创建了几个新文件。最重要一个是 Makefile。Makefile 是一个配置文件, 指示 make 程序究竟如何构建程序。没有它,make 程序就不能运行。
    makefile 文件描述了包括最终完成的程序的各组件之间的关系和依赖性。

    构建程序:

    # 运行 make 命令并构建程序
    make
    

    安装程序

    打包良好的源码经常包括一个特别的 make 目标文件,叫做 install。这个目标文件将在系统目录中安装最终的产品,以供使用。 通常,这个目录是 /usr/local/bin,为在本地所构建软件的传统安装位置。

    $ sudo make install
    

    make 维护程序的工具

    make 程序的另一个重要特征:它保持目标文件是最新的。

    构建源码包的三个命令:

    ./configure
    make
    make install
    

    相关文章

      网友评论

          本文标题:22. 编译程序

          本文链接:https://www.haomeiwen.com/subject/ufivsqtx.html