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
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
相关文章推荐
- 转载:JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- JNI 编写动态链接库 HelloNative 详细过程(也即用Java和C在Linux下动态生成并使用so文件过程)
- Linux 下使用gcc生成so(动态链接库)文件
- aix中使用xlc编译生成动态链接库(shared object)(.so)文件的方法
- Linux环境下静态库和动态库的生成和使用 (.a文件和.so文件)
- linux C 生成与使用 so 文件
- 【ARM-Linux开发】linux下Eclipse进行C编程时动态链接库的生成和使用
- qt 动态链接库(.so)使用举例(linux)
- 利用IDEA进行JNI开发:使用NDK生成Linux平台下的so文件
- Linux环境下动态库的生成和使用 (.so文件)
- Linux 下动态链接库 *.so(生成、调用)
- linux 生成和使用动态链接库和静态链接库的Makefile编写
- linux 静态库(.a)、动态库(.so)的创建生成和使用方法
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- linux下gcc编译 .c文件生成动态链接库 .so文件,并测试调用该链接库
- aix中使用xlc编译生成动态链接库(shared object)(.so)文件的方法
- Linux下生成动态链接库是否必须使用 -fPIC 的问题
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- LINUX下简单的编译和使用动态链接库[compile .so use c++ in linux]
- Linux下动态链接库生成与使用