程序编译与函数库(2)

动态函数库加载内存
我们知道内存的访问速度是硬盘的好几倍,如果先将动态函数库加载到内存中,那么在使用动态函数库时就会,就会提高很多效率

语法:ldconfig[-f 需要缓存函数库信息所在文件] [-C 已缓存函数库信息所在文件]

ldconfig –p 列出已缓存函数库信息

需要缓存函数库信息所在文件:在这个文件中记录所有需要缓存的的函数库默认值是

/etc/ ld.so.conf

举例:查看下我的系统下缓存的函数库

[root@bogon etc]# vim ld.so.conf
include ld.so.conf.d/*.conf

[root@bogon etc]# cd ld.so.conf.d/
[root@bogon ld.so.conf.d]# ll
-rw-r--r-- 1 root root  15 2013-01-23 mysql-i386.conf
-rw-r--r-- 1 root root  17 2013-01-09 openais-athlon.conf
-rw-r--r-- 1 root root  20 2012-08-20 qt-i386.conf
-rw-r--r-- 1 root root 276 02-22 19:23 vmware-tools-libraries.conf
-rw-r--r-- 1 root root  19 2013-08-07 xulrunner-32.conf
[root@bogon ld.so.conf.d]# vim mysql-i386.conf
[root@bogon ld.so.conf.d]# ll /usr/lib/mysql
lrwxrwxrwx 1 root root      26 02-18 20:03 libmysqlclient_r.so.15 -> libmysqlclient_r.so.15.0.0
-rwxr-xr-x 1 root root 1460684 2013-01-23 libmysqlclient_r.so.15.0.0
lrwxrwxrwx 1 root root      24 02-18 20:03 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root 1452764 2013-01-23 libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root  13220 2013-01-23 mysqlbug
-rwxr-xr-x 1 root root    6215 2013-01-23 mysql_config
 

已缓存函数库信息所在文件:这个文件中记录了已经缓存的函数库,默认文件为

/etc/ld.so.cache ,通过-p查询到的信息就是从这个文件读取而来

举例:查看所有已缓存的函数库

[root@bogon ld.so.conf.d]# ldconfig -p|more
947 libs found in cache `/etc/ld.so.cache'
        libz.so.1 (libc6) => /lib/libz.so.1
        libz.so.1 (libc6) => /usr/lib/libz.so.1
        libx11globalcomm.so.1 (libc6) => /usr/lib/libx11globalcomm.so.1
  ……..查看程序所包含的动态函数库
语法:ldd –v文件名

-v:列出所有函数库信息

举例:

[root@bogon ld.so.conf.d]# ldd  /usr/bin/passwd
        linux-gate.so.1 =>  (0x00ddc000)
        libuser.so.1 => /usr/lib/libuser.so.1 (0x007c5000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x05c74000)
      ……
 

make编译
如果一个程序中有很多文件,那么还像上面那样讲每个文件列出来在进行编译就会很麻烦。因此这种时候就需要使用make工具了

Make编译好处

简化编译时所需的指令

若在编译完成后,修改了某个源文件,只会针对修改的文件编译

Make使用方法

Make是有个二进制文件,其会查找当前目录下的Makefile文件,根据其里面定义的内容执行操作。 Makefile里面包含了若干目标与操作

其基本关于规则如下

目标:

<tab>操作

REST2HTML=html.py --compact-lists --date --generator

all: user_manual.html dev_manual.html

user_manual.html: user_manual.rst
        $(REST2HTML) user_manual.rst user_manual.html

dev_manual.html: dev_manual.rst
        $(REST2HTML) dev_manual.rst dev_manual.html

clean:
        rm *.html
 

以上内容分为三个目标all,user_manual.html,clean,其下面分别对应的是其操作

我们可以通过make 后面参数为目标进行执行。如:make clean

Tarball的安装
由于Unix like具有很多种。因此一个软件安装包不可能适用所有所本,因此有时我们需要根据软件提供者提供的源码自行编译,以满足在自己的操作系统上运行

大部分软件开发包编译与安装的流程大致是这样的

1.      讲压缩文件解压缩

2.      解压缩后执行里面的configure文件,其作用就是建立makefile文件

3.      Make clean:清理一些上次操作的残留

4.      Make :默认操作进行编译的行为

5.      Make install:安装

说明:安装前如果有安装文档最好先查阅

3-4步骤 不一定都存在。可查看makefile内容判断具体包括哪些目标

举例:

[root@bogon shared]# tar -zxvf ntp-4.2.4p7.tar.gz -C /tmp
…..
[root@bogon ntp-4.2.4p7]# ./configure --prefix=/usr/loacl/ntp
=> --prefix=/usr/loacl/ntp为指定安装目录
[root@bogon ntp-4.2.4p7]# ll Makefile
-rw-r--r-- 1 root 6011 23950 04-05 21:40 Makefile
=>生成了Makefile文件
root@bogon ntp-4.2.4p7]# ll Makefile
root@bogon ntp-4.2.4p7]# make clean
root@bogon ntp-4.2.4p7]# make
root@bogon ntp-4.2.4p7]# make install

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/18693.html