- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于Linux中库函数的几个问题
关于关于 LinuxLinux 中中库函数的几个问题库函数的几个问题
关于关于 LinuxLinux 中中库函数的几个问题库函数的几个问题
linux 下文件的类型是不依赖于其后缀名的,但一般来讲:
.o,是目标文件,相当于windows 中的.obj 文件
.so 为共享库,是shared object,用于动态链接的,和dll 差不多
.a 为静态库,是好多个.o 合在一起,用于静态链接
.la 为libtool 自动生成的一些共享库,vi 编辑查看,主要记录了一些配置信息。可以用
如下命令查看*.la 文件的格式 $file *.la 输出 *.la: ASCII English text 。所以可以用vi 来查看
其内容。
创建.a 库文件和.o 库文件:
[root@localhost test]$ pwd
/home/root/test
[root@localhost test]$ cat mylib.c
#include stdio.h
#include string.h
void hello(){
printf(success call from perl to c library\n);
}
[root@localhost test]$ cat mylib.h
extern void hello();
[root@localhost test]$ gcc -c mylib.c
[root@localhost test]$ dir
mylib.c mylib.h mylib.o
[root@localhost test]$ ar -r mylib.a mylib.o
ar: 正在创建 mylib.a
[root@localhost test]$ dir
mylib.a mylib.c mylib.h mylib.o
动态链接库*.so 的编译与使用
动态库*.so 在linux 下用c 和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库
的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动
态库链接库而苦恼的兄弟们提供一点帮助。
1、动态库的编译
下面通过一个例子来介绍如何生成一个动态库。这里有一个头文件:so_test.h,三个.c
文件:test_a.c、test_b.c、test_c.c,我们将这几个文件编译成一个动态库:libtest.so。
so_test.h :
#include stdio.h
#include stdlib.h
void test_a();
void test_b();
void test_c();
test_a.c :
#include so_test.h
void test_a()
{
printf(this is in test_a...\n);
}
test_b.c :
#include so_test.h
void test_b()
{
printf(this is in test_b...\n);
}
test_c.c :
#include so_test.h
void test_c()
{
printf(this is in test_c...\n);
}
将这几个文件编译成一个动态库:libtest.so
$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
2、动态库的链接
在1、中,我们已经成功生成了一个自己的动态链接库libtest.so,下面我们通过一个程
序来调用这个库里的函数。程序的源文件为:test.c 。
test.c :
#include so_test.h
int main()
{
test_a();
test_b();
test_c();
return 0;
}
将test.c 与动态库libtest.so 链接生成执行文件test :
$ gcc test.c -L. -ltest -o test
测试是否动态链接,如果列出libtest.so,那么应该是链接正常了
$ ldd test
执行test,可以看到它是如何调用动态库中的函数的。
3、编译参数解析
最主要的是GCC 命令行的一个选项:
-sh
您可能关注的文档
最近下载
- 福建省莆田市城厢区2023-2024学年六年级下学期期末检测数学试题.docx VIP
- IPC4552B+中文+2021+印制板化学镀镍+浸金(ENIG)镀覆性能规范.pdf
- 2024年四川省绵阳市中考数学试题卷(含答案解析).docx
- 系统故障诊断技术、算法及MATLAB实现-全套PPT课件.pdf
- 一种连续碳化制备拟薄水铝石的工艺方法.pdf VIP
- CJJ∕T 135-2009 (2023年版) 透水水泥混凝土路面技术规程.pdf
- 划拨土地转让合同6篇.docx
- GB∕T 28650-2012 公路防撞桶.pdf
- 动火作业安全培训.pptx VIP
- 2024年正规个人借条标准格式模板.docx
文档评论(0)