关于.so 文件的认识
来源:互联网 发布:青岛广电的网络电视 编辑:程序博客网 时间:2024/06/04 20:14
linux下何谓.so文件:1. 用过windows的同学应该都知道 .dll文件吧, 这二者有什么共通之处呢,其实 .so文件就跟.dll文件差不多.//
2.一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码).//
3.Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库.//
4.那么.so文件是怎么用的呢?
for example:(1)动态库的编译
这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
(参考2:都是由C或C++编译出来的)
(-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件)
(-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。)
(2)动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
(注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了)
(-L.:表示要连接的库在当前目录中)
(-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称)
命令:$ ldd test
(注:执行test,可以看到它是如何调用动态库中的函数的。)
Ok, That's all !
2.一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码).//
3.Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库.//
4.那么.so文件是怎么用的呢?
for example:(1)动态库的编译
这里有一个头文件:so_test.h,三个.c文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
(参考2:都是由C或C++编译出来的)
(-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件)
(-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。)
(2)动态库的链接
这里有个程序源文件 test.c 与动态库 libtest.so 链接生成执行文件 test:
命令:$ gcc test.c -L. -ltest -o test
(注:测试是否动态连接,如果列出libtest.so,那么应该是连接正常了)
(-L.:表示要连接的库在当前目录中)
(-ltest:编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称)
命令:$ ldd test
(注:执行test,可以看到它是如何调用动态库中的函数的。)
Ok, That's all !
0 0
- 关于.so 文件的认识
- 关于.so 文件的认识
- 关于linux下.so文件的认识
- 关于linux中so文件的深入认识
- 关于Android的.so文件
- 关于Android的.so文件
- Linux动态链接库so文件的一些认识
- linux下动态库so文件的一些认识
- linux下动态库so文件的一些认识
- linux下动态库so文件的一些认识
- linux下动态库so文件的一些认识
- linux下动态库so文件的一些认识
- linux下动态库so文件的一些认识
- 关于Android的.so文件 CPU架构
- 关于Android的.so文件导入问题
- 关于DVD的VOB文件的认识
- 生成so库的认识
- 关于so文件找不到
- 内核调用
- eclipse使用笔记
- Sort List
- 如何在DevExpress ASPxGridView中进行编辑
- Java里的字符串, String类简单介绍.
- 关于.so 文件的认识
- ARM内容简介
- 新工具:AllJoyn C++ 代码生成器
- OVS datapath模块分析:基本架构
- JS 异步队列的实现
- 软件设计是怎样炼成的(1)——什么是优秀的设计?
- 也许爱情只是因为寂寞,需要找一个人来爱
- vs2012智能提示突然不能用了
- 多线程初步