易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux 关于动态链接库以及静态链接库的一些概念

库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a
为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
ln -s libhello.so.1.0 libhello.so.1
ln -s libhello.so.1 libhello.so
使用库
当 要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然 而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的 缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
现在假设有一个叫hello的程序开发包,它提供一个静态库libhello.a 一个动态库libhello.so,一个头文件hello.h,头文件中提供sayhello()这个函数
/* hello.h */
void sayhello();
另外还有一些说明文档。这一个典型的程序开发包结构
1.与动态库连接
linux默认的就是与动态库连接,下面这段程序testlib.c使用hello库中的sayhello()函数
/*testlib.c*/
#include  
#include  
int main()
{
sayhello();
return 0;
}
使用如下命令进行编译
$gcc -c testlib.c -o testlib.o
用如下命令连接:
$gcc testlib.o -lhello -o testlib
在连接时要注意,假设libhello.o 和libhello.a都在缺省的库搜索路径下/usr/lib下,如果在其它位置要加上-L参数
与与静态库连接麻烦一些,主要是参数问题。还是上面的例子:
$gcc testlib.o -o testlib -WI,-Bstatic -lhello
注:这个特别的"-WI,-Bstatic"参数,实际上是传给了连接器ld.
指示它与静态库连接,如果系统中只有静态库当然就不需要这个参数了。
如果要和多个库相连接,而每个库的连接方式不一样,比如上面的程序既要和libhello进行静态连接,又要和libbye进行动态连接,其命令应为:
$gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic -lbye
3.动态库的路径问题
为了让执行程序顺利找到动态库,有三种方法:
(1)把库拷贝到/usr/lib和/lib目录下。
(2)在LD_LIBRARY_PATH环境变量中加上库所在路径。例如动态库libhello.so在/home/ting


相关文档:

linux文件 /etc/services 相关

/etc/services
Internet网络服务文件,记录网络服务名和它们对应使用的端口号及协议。文件中的每一行对应一种服务,它由4个字段组成,中间用TAB或空格分隔,分别表示“服务名称”、“使用端口”、“协议名称”以及“别名”。下面是这个文件的节选内容。
tcpmux 1/tcp ......

Linux下常见文件格式的压缩、解压小结

  
大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我们将随时修改完善,谢谢!
  .tar
  解包: tar xvf FileName.tar
  打包:tar cvf FileName.tar DirName
  (注:tar是打包,不是压缩!)
  ---------------------------- ......

配置Linux wget,yum 使用代理访问网络

配置Linux wget,yum 使用代理访问网络。
如果你的linux主机需要通过代理服务器才能访问外部网络。可以通过如下方式实现。
1.wget
需要在当前用户的目录下创建一个".wgetrc"文件
[root@linux ~]#vi .wgetrc
http-proxy = 10.1.18.34:3128
ftp-proxy = 10.1.18.34:3128
分别表示http的代理服务器和ftp的代理服务器。如 ......

Linux Kernel学习笔记

Linux Kernel学习笔记
Table of Contents
1. 存储器寻址
2. 设备驱动程序开发
3. 字符设备驱动程序
3.1. 设备号
3.2. 设备号的分配和释放
3.3. 重要的数据结构
3.4. 读和写
4. PCI设备
5. 内核初始化优化宏
6. 访问内核参数的接口
7. 内核初始化选项
8. 内核模块编程
8.1. 入门
8.2. 为模块添加 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号