您的位置:首页 > 运维架构 > Linux

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

2006-11-18 18:48 363 查看
创建 .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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: