Linux下共享库

Linux系统下,共享库:

 

共享库:引用库中相应二进制代码的入口位置,从而间接引用
在Linux中,以lib***.so.xx 为格式

 

/etc/ld.so.conf            共享库的搜索位置
如:
#cat /etc/ld.so.conf
/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/sane
/usr/lib/qt-3.1/lib

ldconfig                      共享库管理工具,在更新了共享库后运行该命令
ldd                             查看可执行文件所用的共享库

使用共享库示例:
如:
libhello.c  libhello.h  usrhello.c            //共享库源文件、共享库头文件、应用程序

#cat libhello.c                               //查看库源文件内容
#include <stdio.h>
 
void print_hello(void)
{
 printf("hello world,this is library!/n");
}

#cat libhello.h                               //查看库头文件内容
#ifndef __libhello_H__
#define __libhello_H__
 
void print_hello(void);
 
#endif /*__libhello_H__*/

#cat usrhello.c                             //查看应用程序
#include "libhello.h"
 
int main()
{
 print_hello();
 return 0;
}

//开始生成共享库
#gcc -fPIC  -Wall -g -c libhello.c         //生成目标文件libhello.o
-fPIC        生成与位置无关代码
-g            生成调试信息
-c             编译成.o 文件

#gcc -g -shared -W1,-soname,libhello.so.0 -o libhello.so.0.0 libhello.o -lc                //生成共享库
-shared     创建共享库
-W1          为将后面的“soname,libhello.so.0”传递给共享库
-soname,libhello.so.0          说明soname为libhello.so.0,其目标名为libhello.0.0
-lc             引用C库

#ln -sf libhello.so.0.0  libhello.so.0
前面定义库名为libhello.so.0,因此需要创建一个libhello.so.0到libhello.so.0.0的连接

#ln -sf libhello.so.0     libhello.so
为了在连接用户的程序时使用lhello,需要再进行连接

#gcc -Wall -g -c usrhello.c              生成目标文件usrhello.o
-Wall               去除所有警告

#gcc -g -o usrhello_shared usrhello.o -L ./ -lhello      //连接库

#ldd usrhello_shared
libhello.so => not found                          //在默认搜索路径中没有找到此库

#LD_LIBRARY_PATH=$(pwd)  ./usrhello_shared        //指明库的路径
hello,world,library!

 

使用静态库,可以直接编译到执行文件中,因此文件执行不需要查找该库的路径
使用共享库,运行时需要相应库的支持

Linux系统首先会在“LD_LIBRARY_PATH”变量下查找库文件
然后到/etc/ld.so.conf文件里所给的路径查找

Linux会在路径/lib    /usr/lib下的库文件中搜索,下面是将创建自己的库文件添加到搜索路径的方法:
1、创建共享库,保存在一个文件夹下
2、如果希望在连接时不使用-L标识,就把库文件拷贝到/lib  /usr/lib下,
把保存路径填写到文件/etc/ld.so.conf里
3、执行命令#ldconfig,更新库信息

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值