Linux系统源码包安装过程详解
创始人
2024-07-19 22:21:38
0

         linux最大的好处之一就是它的源码公开,同时,源码也吸引着无数的电脑爱好者和程序员;他们把解读和分析linux代码作为自己的兴趣和爱好之一,以下是介绍linux源码安装包的过程:

一、 解压缩包

  可以通过下载或其他方式获得了一个软件包,通常它是一个压缩文件,大部分可能是存档的和压缩的,这些文件一般以 .tar .gz为扩展名。

  首先拷贝它到一个目录,然后 untar 和 gunzip 解压它。 通常这个命令是

  tar xzvf filename [filename 是软件文件名称]

  解压后的文件一般会在当前目录下的创建子目录,并以这个包名来命名。 你也可以用用这个命令预先查看结果 tar tzvf filename,显示包里有那些解压文件。

  源文件如果是新的 bzip2 (.bz2) 格式,可用 bzip2 -cd filename | tar xvf -,或更简单的 tar xyvf filename ,这很不错的tar命令被不断的完善。

  说明:

  A:有时候一些文件必须安装在用户的 home 目录下,或更多的是在一个固定的目录,比如 /, /usr/src, 或 /opt 。所以必须仔细阅读安装包的配置信息。当一个软件包里如果有config 和 Makefiles 文件则最好去编辑它,这里包括了安装指令和说明。提示:你改变 makefile 会导致不同的结果。大部分软件包允许用 make install 自动处理安置二进制文件在适当的系统位置。

  B:你可能碰到过一些共享文件、shell 存档文件、尤其是 Internet 上的源码新闻组。它们保留的原因是具有人性化的可读性,并且允许新闻组缓冲并通过它们筛选和剔除出不合格的。它们可能用 unshar filename.shar 命令来解压。

  C: 一些源码存档文件是用非标准的 DOS,Mac 或其他压缩的比如:zip, arc, lha, arj, zoo, rar, and shk.

  D: 有时候,你可能需要使用一个 patch 或显示改变了的 diff 文件来升级或修复存档的源码文件。这 doc 文件或者 README 文件将告诉你怎么去使用。一个很好的命令用标准语法来调用的命令是 patch < patchfile.

二、关于 rpm 安装包

  一些 Linux 用户惧怕通过使用源码来手动安装软件包,不过现在有方便的 rpm 和 deb 或 新格式的 slp 包。例如:rpm 安装运行平稳又快,作为一个软件安装在某几个有名的操作系统。

  作为方便的RPM包也存在很多不好的缺点,例如:
  A: 要了解软件中更多更详细的内容你必须去在二进制中去了解,而不是rpm包。

  B: 还有安装一个 rpm 包如果需要依赖关系那么安装就可能会导致失败。

  C: 当 rpm 请求你系统中不同版本的库,那么安装将不能继续,除非你为错误的库位置创建连接符号到正确的位置。

  说明:必须使用root 安装 rpm 和 deb 。因为它需要必须的写入权限。

  最简单的,用命令 rpm -i packagename.rpm 和 dpkg --install packagename.deb 会自动解包和安装。

三、关于安装 Linux 包出现的一些问题及解决方案

  假设 make 失败有个链接错误: -lX11: No such file or directory,正好在 xmkmf 之后已被调用,这可能意味着 Imake 不能被完全建立。检查第一部分 Makefile 文件的的行是这样:

  LIB= -L/usr/X11/lib
  INCLUDE= -I/usr/X11/include/X11
  LIBS= -lX11 -lc -lm

  这个 -L 和 -I 开关告诉编译器和链接分别在哪里找到 library 和 include 文件。在这个例子里, X11 库应该在 /usr/X11/lib 目录,且 X11 包含文件应该在 /usr/X11/include/X11 目录里。假如对于你的机器上的这个错误,请处理修改 Makefile 并重新再 make。

  没有声明涉及的数学库函数,像下列各项:
  /tmp/cca011551.o(.text+0x11): undefined reference to `cos'

  要修复它,需要明确链接到匹配的库,在 Makefile (看先前的例子) 里增加一个 -lm 到 LIB 或 LIBS 标记 。

  用其他方法尝试
  仍然失败 如果失败,参考下列脚本:
  make -DUseInstalled -I/usr/X386/lib/X11/config

  这个直接方式的类别相当于。

  在少数例子里,用 root 运行 ldconfig 可能会解决:
  # ldconfig 更新共享库链接符号。

  一些 Makefiles 使用你系统里未被承认的库别名。一个例子,构建可能需要 libX11.so.6 ,但是在 /usr/X11R6/lib 不存在文件或链接。然而,在那里是 libX11.so.6.1。解决方法是用 root 运行ln -s /usr/X11R6/lib/libX11.so.6.1 /usr/X11R6/lib/libX11.so.6 ,接着需要运行 ldconfig 。

  有一些包需要你安装一个或更多库的升级版本。需要拷贝一个或更多的库到适当的目录里,删除旧的库,重新设置动态链接库。

#p#

四、一些其他的问题处理

  安装一个shell 脚本如果出现:No such file or directory 的错误消息。这是可以检查文件权限确定文件事可执行的,并检查文件头确定是否 shell 或程序是脚本在指定的位置被调用。一个例子,这个脚本可能是这样开始的:

  #!/usr/local/bin/EDEN

  如EDEN的实际安装位置是在你的 /usr/bin 目录,用一个 /usr/local/bin 替代

  这个脚本不能运行有两个方法来纠正!

  A: 文件头改成 #!/usr/bin/EDEN

  B: 或增加一个链接符, ln -s /usr/bin/EDEN

五、一个典型的例子 Xloadimage

  首先说明下面的例子来源于国外网站的一个技术实例,这里我做了翻译和整理。

  这个例子展现一个简单的问题。xloadimage 程序对我的图形工具的调整设置是有用的附加。从源码目录拷贝文件,用 tar xzvf 解压文件,可是在运行 make 的时候出现令人讨厌的错误并停止了。

 

  1.  gcc -c -O -fstrength-reduce -finline-functions -fforce-mem  
  2.   -fforce-addr -DSYSV -I/usr/X11R6/include  
  3.   -DSYSPATHFILE="/usr/lib/X11/Xloadimage" mcidas.c  
  4.   In file included from /usr/include/stdlib.h:32,  
  5.  
  6. from image.h:23,  
  7.  
  8. from xloadimage.h:15,  
  9.  
  10. from mcidas.c:7:  
  11.  
  12.   /usr/lib/gcc-lib/i486-linux/2.6.3/include/stddef.h:215:  
  13.  
  14.   conflicting types for `wchar_t'  
  15.  
  16.   /usr/X11R6/include/X11/Xlib.h:74: previous declaration of  
  17.  
  18.   `wchar_t'  
  19.  
  20.   make[1]: *** [mcidas.o] Error 1  
  21.  
  22.   make[1]: Leaving directory  
  23.  
  24.   `/home/thegrendel/tst/xloadimage.4.1'  
  25.  
  26.   make: *** [default] Error 2  
  27.  

  这个错误消息包含了实质的线索:

  查看 image.h 文件的 23 行:
  #include

  在源码的某处对于 xloadimage, wchar_t 已经在指定标准 include 文件重新定义。 告诉我们首先在 image.h 的 23 行尝试注释它,或许 stdlib.h include 是不存在的,毕竟不是所有都是必需的。

  在这点,构建中的收益来源于所有任何一个致命错误。xloadimage 现在功能正常。

六、总结

  linux源码是很有吸引力的,特别是你弄懂了自己思考了很久的一个问题,或者是你修改的内核顺利通过编译,一切运行正常时,一种成就感油然而生。所以,坚持自己动手处理所有的安装出现的问题,不断总结努力学习,从错误里去仔细研究,努力动手排错,从每个不足甚至失败的地方得到扩充和提升,可以更好地增强安装构建软件的技巧。

 

【编辑推荐】

  1. 8.1 Linux内核源码组织
  2. 8.3.1 获取源码
  3. 1 我的源码让猫给吃了
  4. 8.4.2 下载Linux 2.6内核源码文件
  5. linux下MySQL源码如何进行纯手动安装?
  6. 8.4.2 下载Linux 2.6内核源码文件

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...