`
aol_aog
  • 浏览: 16877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Linux操作系统上编译程序的方法详细介绍

 
阅读更多
每个人迟早都要下载程序的源码,然后试着编译它。如果你是RedHat或Debian的忠实追随者,你最终会发现一个程序不是太老就是太新,而去找已经编 译过的二进制代码。坏的一方面是这些代码可能无论你怎么做,它们永远不能被正确的编译记住,大多数的Linux程序最多只是beta测试版。好的一方面是 在过去的五年中编译没有问题的程序正在增加,而且即使你不是程序员,你也可以“修复”那些不能正确编译代码。下载以后,现在你的硬盘上应该有一个某种类型 的压缩包。首先,你必须把它解压(uncompress),并把它解包(untar)到一个目录。在习惯上,很多人都把它们放到这个目录:/usr /src。这样能把所有的东西都放在一个地方,你以后可以清除它们。使用这个目录需要有root身份。如果一个用tar打包的文件是用gzip压缩的,则 Linux的tar程序可以同时把它解压和解包。如果你的文件名叫做:filename.tar.gz,你可以到/usr/src目录,然后键入:

  tar -xzvf /{path to file}/{filename.tar.gz} [Enter]

 这将会把这个文件解压并解包。这里是几个参数简单的解释:x -把文件解包z -把文件解压v -显示处理过程f -后面跟着你要处理的打包文件名如果你用netscape下载的这个文件,可能会看到错误。有时netscape会为你解压这个文件。

  因此,如果你象上面这样untar它,你可能会看到这样的信息:

  gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error exit delayed from previous errors

  试着执行上面的命令,但把z参数删掉,就是这样:tar -xvf /{path to file}/{filename.tar.gz} [Enter] 除了gzip,有些文件是用bzip2来压缩的,因此这些文件看起来象这样the-program.tar.bz2。z参数对这种文件不起作用。解开这种 文件最简单的方法就是bunzip2 the-program.tar.bz2。这样将把使用下面命令解包出来的the-program.tar文件解开:

tar -xvf /{path to file}/{filename.tar.gz} [Enter]

  解包以后:

  cd到刚才解包时创建的那个目录里。用ls看看这个目录里的文件。首先你应该读读README和INSTALL文件。如果你没读这些文件,不要 想从别人那里得到帮助。这是RTFM这个缩写在网上使用很广泛的原因(RTFM是`Read The Fucking Manual'的缩写。README和INSTALL文件将会告诉你如何编译和安装这个程序。

  要编译它,执行"make"命令。为了让"make"可以开始编译,必须有个叫Makefile的文件(你也可以通过在命令行上来写入make的参数,但那不在本文的讨论范围只内)有通常三个方法开始编译:simple,Imake和configure。

  Simple编译:

  如果你看到一个叫Makefile的文件--没有叫Imake或configure的文件,那么你就使用这个方法来编译。因为不能为你的计算机 设置,所以用这种方法来编译有很多问题。通常README和INSTALL文件会告诉你如何编辑某些文件来使它可以正常编译。通常,你可以这样做:

  make [Enter] make install [Enter]

  如果一切正常,那么你现在就可以运行这个程序了。

  Imake: 如果ls这个目录看到有Imake文件,并且没有Makefile,那么你就使用这个方法。这是一个设置编译的比较老的方法。基本上你要键入:

  xmkmf [Enter] make [Enter] make install [Enter] Configure:

  如果这个目录中有个叫configure的文件,那就要用这个方法。这是编译程序最简单的方法,而且编译成功率很高。本质上,它会检查你的这个 系统,来查看每一个可能的哭和支持文件来确保你可以编译这个程序,然后根据这些正确的信息来创建Makefile文件。如下执行:

  ./configure [Enter] make [Enter] make install [Enter]

注意第一个命令前面的./。当你键入一个命令的时候,shell会在你的路径里查找文件。它不从当前目录开始查找,因此如果./(代表当前目录)没 有在路径里,虽然ls看的见这个文件,但是shell却找不到。shell能执行make是因为它通常都在/usr/bin里,而/usr.bin在路径 里。要看路径,如下执行:

  echo $PATH [Enter]

  如果出现错误:

  不能编译的最常见错误原因是找不到文件。几乎所有的程序都靠有些程序,文件或库的支持。如果它们找不到,程序就不能编译。 README/INSTALL文件应该告诉编译这个程序所需要哪些文件,和这些文件的版本。注意:错误的版本会象根本没有这个文件一样让你不能编译。通 常,你要知道是不是这个问题可以从编译程序输出结尾的错误信息中得知,这些信息将告诉你找不到什么文件。注意:有时你有这些文件,但是它们不在 Makefile文件所指明的地方。使用linux的发布安装程序,例如rpm,来检查你是否丢失了某些文件。如果没有这些文件的话,去找它,如果有,并 且版本正确,检查Makefile文件看看它要求这个文件放在什么地方。例如:moc文件在/usr/local/bin里,但是Makefile 说:moc=/opt/bin/moc。编辑一下Makefile(用vi或者任何什么文本编辑器)然后改一下moc的路径即可。

  另一个常见的错误是丢掉了"include"的文件。很多程序的中的原文件的头几行是这样的:

  #include #include #include #include

  这些"h"文件(或者叫头文件)必须存在于你的计算机里。最少你应该有内核的头文件,使用ls /usr/include/linux查看。如果你安装了一些库,象gtk,确定也安装了它们的开发文件。有时同一个库的几个版本可能导致一些问题,每个 版本可能把它的头文件放在不同的地方,可你并不知道编译的时候使用的到底是哪个文件。

  如果你改变了Makefile中的所有应该改变的地方,并且所有的库和头文件都对,而它仍然不能编译,那么顺序如下做:

  1、如果你是从一个和这个程序的主站不同的另外一个站点下载的这个程序,那么去它的主站看看有没有更新的版本可以使用。

  2、去dejanews.com这个站点,搜索一下这个程序。这里很可能有其他人遇到了同样的问题,并且已经贴出来了解决方法。

  3、如果所有的方法都不行的话,email给作者。很多作者对改进他们的程序以及bug报告和性能建议都很有兴趣,通常都会被很好的接受(记 注:这是linux,不是商业软件。)注意:你的bug报告最好多说些关键的情况,不要只说一句"这个程序不能编译"!我通常是email过去编译结果的 最后十行或更多行,这样作者才能看到是那里出现的错误。如果我真的喜欢这个程序,我会在下一个新版本发布以后尽可能给作者游泳的反馈。注意,程序员也是人 --他们会有两个星期的休假、跳槽、搬家等等其他十五,因此不要期望能够立即得到回复。最后,有些程序有唯一的编译设置:马上能想到的有qt和内核,我再 最后重复一遍:读README和INSTALL文件。

分享到:
评论

相关推荐

    深度探索Linux操作系统

    让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究linux操作系统10几...

    深度探索Linux操作系统:系统构建和原理解析.王柏生(带详细书签).part1

    让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究Linux操作系统10几...

    LINUX操作系统(电子教案,参考答案)

     本书可作为Linux操作系统课程的教材,也可作为电脑爱好者,相关技术人员及参加Linux认证考试人士的参考书。 一、关于Linux Linux是一个正在蓬勃发展的极富生命力的操作系统。芬兰青年Linus Torvalds和其杰作的...

    linux操作系统下C语言编程入门 gcc编译

    linux操作系统下C语言编程入门 gcc编译 gdb调试技术 实例演示

    深度探索Linux操作系统:系统构建和原理解析.王柏生(带详细书签).part2.rar

    让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究Linux操作系统10几...

    Linux操作系统的内核编译内幕详解

    内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。 Linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下...

    linux下GCC编译C程序

    它已成为许多集成开发工具的基础,被世界各地的发行商应用在Linux和其他操作系统之上。 GCC已不再是主要针对GNU项目自身的软件的小型C语言编译器了。如今,它已支持了许多不同的语言,包括C、C++、Ada、Fortran、...

    深度探索Linux操作系统:系统构建和原理解析-王柏生.pdf

    让读者先从宏观上全面认清一个完整的操作系统中都包含哪些组件,各个组件的作用,以及各个组件间的关系,从微观上深入理解系统各个组件的原理,帮助读者达到事半功倍的学习效果,这是作者潜心研究linux操作系统10几...

    NOI Linux 考试操作系统食用指南

    要进行csp-s/j得第二轮认证那不得不学习一下noi ...通过以上介绍,希望你可以更好地了解NOI Linux操作系统的特点和使用方法,从而更高 效地进行编程学习和考试准备。 在最后我再次祝愿大家考试顺利,拿到一个好成绩。

    Linux 操作系统:操作系统原理、Linux 应用实践.zip

    linux操作系统 操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。计算机系统由硬件和软件两部分组成。操作系统 (OS,Operating System) 是配置在计算机硬件上的第一层软件,是对...

    Linux操作系统下C++编程

    在Windows下有TC, BC, VC等编译器,它们极大地方便了程序的编辑编译等,在Windows下你只需要看明白菜单就可以了。...本文以一个最简单也是最经典的Hello World为例介绍了Linux操作系统下C++编程的方法。

    操作系统上机-Linux多线程编程

    操作系统上机-Linux多线程编程

    Linux操作系统GRUB引导程序配置方法

    Boot Loader是计算机启动中第二个要执行的程序,它是引导操作系统的关键程序。可以引导操作系统的Boot Loader主要有LiLo、GRUB以及Windows下的MBR程序。...本文阐述了GRUB的特性,介绍了编译、安装和操作GRUB的方法。

    深度探索Linux操作系统 系统构建和原理解析.part1.rar

    在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链的组成及各个组件的作用,理解工具链的工作原理对理解操作系统至关重要。第3~4章,从零开始构建了一个具备用户字符...

    《Linux操作系统》实验报告

    1.了解Linux系统基本操作方法,学会独立使用该系统。 2.熟悉Linux下如何编辑、编译和运行一个C语言程序。 3.学会利用gcc、gdb编译、调试C程序。

    Linux操作系统实验指导书+课题组编写

    Linux操作系统实验指导书+课题组编写 目录 《操作系统原理》课程实验指导书 1 《操作系统原理》课程组 编目录 1 目录 2 实验一 Linux的安装与编译 3 1.1 实验目的 3 1.2 背景知识 3 1.2.1 Linux简史 3 1.2.2 内核...

    Linux操作系统内核技术详细解读

    Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心都是一个稳定地发行的核心,而任何奇数的核心都是一个开发中的核心。核心源程序的文件按树形结构进行组织,在源程序...

    Linux操作系统实用教程

    本书从三个方面来介绍Red Hat Linux操作系统。第一部分是Red Hat Linux操作系统的安装、配置及常用命令。第二部分是Red Hat Linux操作系统的网络管理。包括如何管理用户,如何设置DNS服务器,SMTP/POP3 E-...

    深度探索Linux操作系统 系统构建和原理解析.part2.rar

    在这一章中,不仅详细讲解了工具链的构建过程,而且还通过对编译链接过程的探讨,深入讨论了工具链的组成及各个组件的作用,理解工具链的工作原理对理解操作系统至关重要。第3~4章,从零开始构建了一个具备用户字符...

    linux操作系统命令大全

     在Linux操作系统下,要经常对Linux文件和磁盘进行管理和操作。本章主要介绍如何在Linux环境下对文件、磁盘、目录进行管理,还介绍了进行这些管理所需要的命令,并且详细的介绍了这些命令的用法和例子。需要掌握的...

Global site tag (gtag.js) - Google Analytics