侧边栏壁纸
博主头像
伯淳的个人博客博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 5 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

软件安装:源代码与Tarball

Administrator
2023-11-05 / 0 评论 / 2 点赞 / 47 阅读 / 8204 字

1.开放源码的软件安装与升级

开放源代码:程序代码,写给人类看的程序语言,但机器不认识,无法执行。

编译器:将程序代码转译成机器能看懂的语言。

可执行文件:经过编译器变成的二进制程序。

Tarball文件:

将软件的所有源文件先以tar打包,然后再以压缩技术来压缩,常见的是以gzip来压缩,Tarball文件一般的扩展名会写成*.tar.gz或*.tgz。

所以,Tarball是一个软件包,里面通常有:

  • 源代码文件

  • 检测程序文件(可能是configure或config等文件)

  • 本软件的简易说明与安装说明(INSTALL或README)

2.gcc的简易用法

gcc hello.c 不加任何参数,则执行文件的文件名会被自动设置为a.out

这也是常常看到命令gcc hello.c && ./a.out 的原因。

# 仅将源代码编译成为目标文件
[root@study ~]# gcc -c hello.c
# 会自动产生hello.o这个文件,但不会产生二进制执行文件

# 在编译的时候,根据操作环境给予最佳化执行速度
[root@study ~]# gcc -O hello.c -c
# 会自动产生hello.o这个文件,并且执行速度最佳

# 在进行二进制文件制作时,将链接的函数库与相关的路径加入
[root@study ~]# gcc sin.c -lm -L/lib -I/usr/include
# 这个命令通常使用在最终链接成二进制文件的时候;
# -l 是加入某个函数库的意思,m则是libm.so 或 libm.a这个函数库,故-lm 指的是 libm.so 或 libm.a 这个函数库的文件;
# -L 后面接的路径是刚刚上面的那个函数库的查找目录;
# -I 后面接的是源代码内的include文件所在的目录。

# 将编译的结果输出成某个特定的文件名,这里是hello
[root@study ~]# gcc -o hello hello.c
# -o 后面接的是要输出的二进制文件名

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

3.用make进行宏编译

3.1makefile的基本语法与变量

基本的makefile规则是这样的:

目标(target): 目标文件1 目标文件2 ...

<tab> gcc -o 欲建立的执行文件 目标文件1 目标文件2 ...

  • <tab>需要在命令行的第一个字符

  • 目标与依赖文件之间需要以 : 隔开

  • 在makefile中 $@ 代表目前的目标(target)

当重复的数据很多时,makefile中也可以使用变量来简化:

[root@study ~]# vi makefile
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
main: ${OBJS}
        gcc -o main ${OBJS} ${LIBS}
clean:
        rm -f main ${OBJS}

与bash shell 的语法有点不同,变量的基本语法为:

1.变量与变量内容以 = 隔开,两边可以具有空格

2.变量左边不可以有<tab>

3.变量与变量内容在 = 两边不能有 :

4.在该shell的环境变量是可以被套用,例如CFLAGS这个变量

5.在命令行模式也可以设置变量

注意:①make命令行后面加上的环境变量为优先

②makefile里面指定的环境变量第二

③shell原本具有的环境变量第三

3.2make使用示例

[root@study ~]# vi makefile
main: main.o haha.o sin_value.o cos_value.o
	gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
	rm -f main main.o haha.o sin_value.o cos_value.o

[root@study ~]# make clean 
rm -rf main main.o haha.o sin_value.o cos_value.o
[root@study ~]# make clean main
rm -rf main main.o haha.o sin_value.o cos_value.o
cc    -c -o main.o main.c
cc    -c -o haha.o haha.c
cc    -c -o sin_value.o sin_value.c
cc    -c -o cos_value.o cos_value.c
gcc -o main main.o haha.o sin_value.o cos_value.o -lm

使用make的好处:

  • 简化编译时所需执行的命令

  • 若在编译完成之后,修改了某个源代码文件,则make仅会针对被修改的文件进行编译

  • 最后可以依照依赖性来更新执行文件

4.Tarball的管理与建议

建议

  1. 最好将Tarball的原始数据解压缩到/usr/local/src当中;

  2. 安装时,最好安装到/usr/local这个默认路径下;

  3. 考虑到未来的反安装步骤,最好可以将每个软件单独安装在/usr/local下面

  4. 为安装到单独目录的软件的man page加入man path查找:

如果安装的软件放置在/usr/local/software/,那么在man page查找的设置中,可能就要在/etc/man_db.conf内的40-50行左右,加入:

MANPATH_MAP /usr/local/software/bin /usr/local/software/man

这样才可以使用man来查询该软件的在线文件。

4.1利用ntp来示范

利用时间服务器(network time protocal)的ntp软件来测试安装。

  • 假设ntp-4.*.*.tar.gz这个文件放置在/root目录下;

  • 源代码解压到/usr/local/src下

  • 软件安装到/usr/local/ntp目录中

https://www.ntp.org/downloads/中下载文件:

wget https://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p17.tar.gz

解压缩,并阅读INSTALL/README文件:

[root@study ~]# cd /usr/local/src 
[root@study src]# tar -zxvf /root/ntp-4.2.8p3.tar.gz
ntp-4.2.8p3/  <==系统会新建这个目录
ntp-4.2.8p3/CommitLog
....(底下省略)....
[root@study src]# cd ntp-4.2.8p3
[root@study ntp-4.2.8p3]# vi INSTALL

检查configure支持参数,并实际创建makefile规则文件:

[root@study ntp*]# ./configure --help | more  <==查询可用参数
  --prefix=PREFIX         install architecture-independent files in PREFIX
  --enable-all-clocks     + include all suitable non-PARSE clocks:
  --enable-parse-clocks   - include all suitable PARSE clocks:
# 上面列出的是比较重要的

[root@study ntp*]# ./configure --prefix=/usr/local/ntp \
>  --enable-all-clocks --enable-parse-clocks  <==开始建立makefile
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
....(省略)....
checking for gcc... gcc           <==也有找到 gcc 编译器!
....(省略)....
config.status: creating Makefile  <==
config.status: creating config.h
config.status: creating evconfig-private.h
config.status: executing depfiles commands
config.status: executing libtool commands

最后开始编译与安装:

[root@study ntp*]# make clean; make
[root@study ntp*]# make check
[root@study ntp*]# make install

4.2利用patch更新源代码

了解可用patch文件即可。

5.函数库管理

静态函数库:编译时会整合到执行程序中

动态函数库:编译时不会整合到执行程序中,具有指向动态函数库所在的指针,linux大多采用这个

5.1将函数库加载到高速缓存

目的:提高动态函数库的读取速度

ldconfig [-f conf] [ -C cache]

ldconfig [-p]

选项与参数:

-f conf:conf指的是某个文件名,作为函数库的获取路径,而不是用默认的etc/ld.so.conf

-C cache:cache值得是某个文件名,使用cache作为高速缓存的函数库数据,而不是默认的/etc/ld.so.cache

-p:列出目前所有函数库数据内容(在/etc/ld.so.cache内的数据)

5.2程序的动态函数库解析:ldd

ldd [-vdr] [filename]

选项与参数:

-v:列出所有内容信息

-d:重新将数据有遗失的链接点显示出来

-r:将ELF有关的错误内容显示出来

6.校验软件正确性

md5sum/sha1sum/sha256sum [-bct] filename

md5sum/sha1sum/sha256sum [--status|--warn] --check filename

选项与参数:

-b:使用二进制文件的读取方式,默认使用windows/DOS文件格式的读取方式

-c:校验文件校验值

-t:以文本方式读取文件校验值

这里以md5为例:

继续用前面的ntp例子,到官网下载md5校验文件:

wget https://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.8p17.tar.gz.md5

查看官网提供的md5数据:

[root@study ~]# cat ntp-4.2.8p17.tar.gz.md5
MD5 (ntp-4.2.8p17.tar.gz) = a15558df580bd1b955a105a8b91c078f

测试下载的文件的校验值:

[root@study ~]# md5sum ntp-4.2.8p17.tar.gz
a15558df580bd1b955a105a8b91c078f  ntp-4.2.8p17.tar.gz

对比发现校验值一样,说明下载的文件没问题。

2

评论区