Linux 下 动态链接库 .so 的生成和使用

 创建 .so 文件跟一般的ELF文件的生成相似,不同之处在于:

1、添加 -fPIC -shared作为gcc的选项;其中:PIC表示 Position Independent Code,用于指示gcc将.c文件编译为目标代码.o;-shared用户指示gcc连接器输出T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。

2、输出文件名附加lib前缀,附加.so后缀,中间部分作为实际的链接库名;

使用 .so 文件:

你的用户程序需要include .so文件生成时的头文件,在编译选项中需要指示用到的  .so ,保证编译环境可以发现该 .so 文件以及运行时环境可以加载该 .so 文件。这有两种形式:

1、用LD_LIBRARY_PATH=<..>在编译命令前指定,或者使用 -L<链接库的目录>    -l<链接库名> 告知(此时生成的ELF在ldd查看下自定义链接库路径不可见的: => not found)。执行时,可以灵活的由运行时环境提供支持,加载该链接库,比如通过LD_LIBRARY_PATH 在执行命令前指定或者存放到运行时搜索路径变量中去。

2、直接将该链接库的完整路径作为输入的一部分传给编译器,注意:这时链接库的路径将固化在输出的ELF文件汇中,(可以通过ldd yourapp 看出来自定义链接库的路径是可见的) 执行ELF时,运行环境直接按照其固化路径加载链接库,而忽略其他选项。即此时若固化路径上无该链接库,则立即加载失败,不会再从运行环境中寻找。

linux 下静态/动态链接库的 例子:http://dev.csdn.net/Develop/article/28/84562.shtm

关于Windows下的 .dll 文件和 Linux下的 .so的比较:http://www.linuxeden.com/doc/22888.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值