Ubuntu的目录与第三方库

来源:互联网 发布:c语言中的主函数的意义 编辑:程序博客网 时间:2024/04/30 02:00

1.Ubuntu目录结构

在Ubuntu使用记录(常用命令与目录树)中我总结了一些关于Ubuntu/Linux的目录的一些知识,这里回顾一下。

软件主要分为3类,可以用which命令查看,一个软件/命令的位置

①/sbin

表示系统的一些程序,比如shutdown

②/bin

表示一些可以用在bash上面的命令,比如ps,ls等

③/usr/bin

表示其他安装的软件,比如我们需要apt-get install安装的软件,比如firefox,gcc,codeblocks等等


2.库文件

总结自:http://www.cnblogs.com/skynet/p/3372855.html


(1)什么是库

简单说,库就是一些头文件与库文件(可能包括静态库与动态库两种)的集合。

库文件通过头文件向外导出接口,头文件中有函数的声明,库文件中是对应的实现。


(2)位置

①安装的第三方软件

/usr/bin                             可执行文件

/usr/lib                              可执行文件的库文件

/usr/include                     可执行文件的头文件

②安装的第三方库

/usr/local/bin                   安装的库的一些测试程序

/usr/local/lib                    安装的库的库文件

/usr/local/include            安装的库的头文件


(3)静态库

①格式

.a

②加载阶段

编译四大阶段的链接阶段

③本质

一系列目标文件(.o文件)的集合

④特点

程序在运行时与函数库再无瓜葛,移植方便。

浪费空间和资源,所有相关的目标文件与涉及到的函数库被链接合成一个可执行文件。

如果库有更新,且要加载新库,需重新编译整个应用程序。

⑤使用

在Ubuntu/Linux下面,只需在编译的时候指定搜索路径与静态库名

-L         表示要连接的库所在目录

-l          表示链接时需要的静态库(比如libev的静态库文件libev.a在编译的时候,只需要-lev即可)


(4)动态库

①格式

.so

②加载阶段

动态库是在程序运行时,才被加载到内存中。

多个程序如果使用相同的动态库,在内存中只会存在一份拷贝。

③特点

可以实现进程间资源共享,因此也叫坐共享库。

使得程序升级变地简单,只需要更新动态库文件即可。

甚至可以做到链接载入完全由程序员在程序代码中控制(显式调用)。

④使用

由于涉及到编译以及运行两个阶段的库文件查找,所以有两个需要注意的地方。

A。编译阶段

一样的-L和-l

B。运行阶段

由于需要在运行的时候也要找到动态库文件的位置。

这个是在/etc/ld.so.cache文件里面记载的,系统默认在这个文件里面记载有/lib以及/usr/lib

所以,如果你是安装的第三方库,或者是自己生成了一个动态库,你的库文件是在/usr/local/lib中或者其他地方,系统是默认找不到的。

这个时候,编译没有问题,可是一旦运行,系统就会提示找不到某某库文件。

解决办法是修改/etc/ld.so.cache,但是注意,由于这不是一个配置文件,所以不能直接修改。

要通过/etc/ld.so.conf来修改,假设我安装了第三方库libev,库的目录是/usr/local/lib,那么我就要这样做。

$vim /etc/ls.so.conf

另起一行,加上/usr/local/lib

$ldconfig     ,该命令会根据ld.so.conf文件重建ld.so.cache文件,这个时候就能愉快地使用第三方库啦!

⑤补充

ldd命令,ldd 某应用程序

可以查看该应用程序依赖的动态链接库。





0 0
原创粉丝点击