《鸟哥的Linux的私房菜》 学习笔记——原码与Tarball套件管理

1.什么是开放源码、编译器与可执行文件?
a>                        linux真正认识的可执行文件其实是二进制文件(binary file),其实其它的操作系统何尝不也是呢^-^
b>                       使用file这个指令来判断文件是否为二进制文件
                        若为二进制文件而且可以执行的话,则显示:ELF 32-bit LSB executable,同时会说明是否使用动态链接库(shared libs)
                        若为脚本scripts,则显示: text executable。
c>                        编写程序用vi 这个叫原码 ==>经过编译器编译成二进制文件==>可执行文件。

2.什么是函数库?
a>                       函数库又分为动态与静态两种。
b>                       linux核心相关的函数库与外部参数,大多放在/usr/include,/lib,/usr/lib中。

3.什么是configure与make?
a>                       软件开发商常会写一个探测程序,来探测使用者的作业环境,以及该环境是否具有软件所需要的其它功能,这个探测程序就叫configure或config
b>                       configure探测结束之后,会自动的建立makefile(Makefile)
c>                       执行make时,make会在当时目录下搜寻makefile,make会自动的判别原码是否经过变动了,而自动更新可执行文件。

4.什么是Tarball套件?
(1)所谓Tarball套件,即将套件的所有原码文件先以tar打包,然后再压缩,常用gzip压缩。这样Tarball套件的文件扩展名为:.tar.gz 或 .tgz。
(2) Tarball 套件里面的文件通常有:
a> 原始文件
b> 探测程序(configure或config)
c> README,INSTALL

5.如何安装Tarball套件?
流程如下:
(1)将套件下载下来
(2)将Tarball解开,产生很多原码文件
(3)以gcc进行原码的编译(生成目标文件object files)
(4)以gcc进行函数库、主、副程序的连接,以形成binary file
(5)将上述binary file以及相关的设定文件安装到主机上。

6.如何升级套件?
(1)为什么要更新?
a>                     需要新的功能
b>                     安全漏洞
c>                     旧版本执行效率不高
(2)更新方法:
a>                     以原码通过编译来安装与升级
b>                     以编译好的binary file来升级
(3)binary file 升级机制有很多,诸如:
a>                     Red Hat(含Fedora)的RPM /Up2date /yum 等
b>                     Mandrake的urpmi
c>                     Debian的dpkg
d>                     Sun Unix的pkg
e>                     apt

7.一个范例:
a>                  用vi编辑原码: vi hello.c
# include <stdio.h>
int main(void)
{
                      printf("Hello World\n");
}
b>                  gcc编译成可执行binary file: gcc hello.c
不加任何参数,会自动生成一个名为a.out的执行文件。
c>                  执行 a.out :                  ./a.out
d>                  加-c参数生成一个与原文件同名的且以 .o 为扩展名的目标文件: gcc -c hello.c
e>                  将hello.o利用参数-o生成一个名为hello的执行文件: gcc -o hello hello.o
f>                   执行hello : ./hello
g>                  编译时,可用参数-l来连接另外的函数库,搜索路径可用-L/path来表示
                    linux函数库默认放在 /lib 、/usr/lib里
h>                  Include路径可用参数 -I/path来引用
                    linux的include文件默认放在/usr/include。
如:编译sin.c时需要libm.so这个函数库,而lib与扩展名(.a 或 .so 可不写)
所以有:
gcc sin.c -lm -L/lib                  -L/usr/lib
执行: ./a.out

8.gcc的一些用法:
仅将原始码编译成为目标文件,并不制作连结等功能
[root@linux ~]# gcc -c hello.c
# 会自动的产生 hello.o 这个档案,但是并不会产生 binary 执行档。

# 在编译的时候,依据作业环境给予最佳化执行速度
[root@linux ~]# gcc -O hello.c -c
# 会自动的产生 hello.o 这个档案,并且进行最佳化喔!

# 在进行 binary file 制作时,将连结的函式库与相关的路径填入
[root@linux ~]# gcc sin.c -lm -L/usr/lib -I/usr/include
# 这个指令较常下达在最终连结成 binary file 的时候,
# -lm 指的是 libm.so 或 libm.a 这个函式库档案;
# -L 后面接的路径是刚刚上面那个函式库的搜寻目录;
# -I 后面接的是原始码内的 include 档案之所在目录。

# 将编译的结果输出成某个特定档名
[root@linux ~]# gcc -o hello hello.c
# -o 后面接的是要输出的 binary file 檔名

# 在编译的时候,输出较多的讯息说明
[root@linux ~]# gcc -o hello hello.c -Wall
# 加入 -Wall 之后,程序的编译会变的较为严谨一点,
# 所以警告讯息也会显示出来!

9.make 的简易用法:
有四件源文件:test.c haha.c              sin_value.c
test.c:
#include <stdio.h>
int main(void)
{
                haha();
                sin_value();
}

haha.c:
void haha(void)
{
                 printf("haha this is a c file\n");
}
sin_value.c:
int sin_value(void)
{
                float value;
                value=sin(3.14/4);
                printf("%f\n",value);
}

不用make,一步一步来:
a>            生成目标文件
gcc -c test.c
gcc -c haha.c
gcc -c sin_value.c
b>            生成可执行文件
gcc -o test test.o haha.o sin_value.o -lm
c>            执行
./test

用make的步骤:
a>            生编辑makefile
vi make file
main: test.o haha.o sin_value.o
                   gcc -o test test.o haha.o sin_value.o -lm   <== 这一行开头要用tab键
b>            删除原有的目标文件
rm -f test *.o
c>            make

10.make的好处:
a>           简化编译时所需下达的指令
b>           若在编译完成之后,又修改了某个源文件,则make仅会对被修改了的文件进行编译,其它的目标文件不会被动
c>           最后可以依照相关性为更新执行文件。

11.makefile的语法:
目标:目标文件1 目标文件2
<tab>          gcc -o 欲建立的执行文件 目标文件1 目标文件2

12.Tarball包的安装是跨平台的,因为c语言在各个平台上是共通的

13.制作一个可执行的binary file所需要的基础软件包有:
a>        gcc或cc等c语言编译器(c compiler)
b>        make 简化编译,按照目标文件相关性进行编译
c>        autoconfig        探测使用者作业环境
d>        需要kernel的Library以及相关的Include文件
           Red Hat当中,与核心相关的功能包含在kernel-source或kernel-header中

14.Tarball安装的基本步骤:
         Tarball包是以tar,gzip打包压缩的,首先要解压缩,然后到源码所在目录下进行作业环境的探测同时建立Makefile这个参数设定文件,最后再以make来编译,make install来安装成可执行的binary file。
a>       将tar包在/usr/local/src下解压
b>       进入新建的目录中,查阅INSTALL与README
c>       安装一些必需的相关软件包(非必需)
d>       以configure或config来探测作业环境,并建立Makefile
e>       以make进行编译
f>       以make install 进行安装。

15.Makefile在生成后,里面会包含很多的目标(target),最常见的有install与clean
a>       make clean          将目标文件清除
b>       make            将原码进行编译
c>       make install          安装

16.Tarball软件包安装的指令
a>       ./configure          生成参数文件 Makefile
b>       make clean         清除目标文件
c>        make               源文件 -编译->目标文件-链接函数库->执行文件
         这一步生成的可执行文件还放在当前目录中
d>make install             从Makefile中读取参数进行安装

17.Tarball安装时的一些建议:
a>       将tar包下载至/usr/local/src,并在此解压缩
b>       将每个软件包单独安装在/usr/local (这样,删除该文件平,即可视为删除该软件包了
c>       加上man path
          如:将/usr/local/apache的man加到/etc/man.config中
          vi /etc/man.config
          MANPATH /usr/local/apache/man

18.利用patch更新原始码
a>     生成对比文件 expathc.pathc
        diff -Naur expatch.old expatch.new > expatch.patch
b>      更新
        patch -p0 < expatch.patch
c>     重新编译安装。

19.函数库依被使用的类型(是否被编译到程序内部)可分为静态(Static)与动态(Dynamic)两种
(1)静态函数库
a>     扩展名:       libxxx.a 
b>     编译行为:     编译到程序内部(文件可能会大一些)
c>     独立执行: 可以独立执行
d>     升级难易:     难,当函数库升级后,连执行文件也要重新编译一次
(2)动态函数库
a>     扩展名:       libxxx.so
b>     编译行为:     没有编译到程序内部,仅是指向
c>     独立执行:     不能
d>     升级难易:     容易
(3)函数库位置:
        /lib
        /usr/lib
(4)Kernel函数库位置:
       /lib/modules
(5)目前,linux大多采用动态函数库

20.将动态函数库载入缓存(Cache)中: ldconfig     /etc/ld.so.conf
a> 将想读入cache的动态函数库所在的目录写入/etc/ld.so.conf
b>    利用ldconfig将/etc/ld.so.conf读入cache
c>    同时也将资料记录一份在/etc/ld.so.cache中
如将mysql函数库加入cache中,mysql在/usr/local/mysql中
a>    vi /etc/ld.so.conf
加入:/usr/local/mysql
b> ldconfig

21.查看可执行文件含有什么动态函数库: ldd
ldd filename
a>   查看/usr/bin/paswd这个文件的函数库资料
ldd /usr/bin/passwd
b>   查看与/lib/libc.so.6这个函数相关的函数库
ldd /lib/libc.so.6
ldd -v /lib/libc.so.6(显示所有内容)

22.用MD5来检验文件的正确性
md5sum filename

23.wget 下载

http://blog.csdn.net/ma1kong/article/details/6890750

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值