linux下的动态链接库编程
2007-08-20 14:46
204 查看
动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下 也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export 导出符号,只需要编译器设置即可。如下:
#include <stdio.h>
void show()
{
printf("Standard Object by gashero/n");
}
保存为myso.c文件,按照如下编译:
$ gcc -fPIC -shared -o libmyso.so myso.c
执行生成一个libmyso.so文件,按照Linux标准对象的命名惯例,应该在库名称之前加上"lib"前缀,尽管不是必须的。编译开关-fPIC代表函数符号可以重定向,-shared代表编译结果是一个标准对象。
不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。下面我们编写调用程序:
#include <stdio.h>
int main()
{
printf("Invoke my so/n");
show();
return 0;
}
保存为invoke.c,按照如下gcc开关编译:
$ gcc -o test invoke.c ./libmyso.so
编译生成test可执行文件。如上编译条件的最后一条需要是所调用的标准对象文件名,注意必须含有路径。如果只是使用libmyso.so,则必须确保 这个文件在可访问的PATH下面。本例所使用的文件名"./libmyso.so"是当前路径下的,使用了相对路径。
测试输出结果如下:
$ ./test
Invoke my so
Standard Object by gashero
#include <stdio.h>
void show()
{
printf("Standard Object by gashero/n");
}
保存为myso.c文件,按照如下编译:
$ gcc -fPIC -shared -o libmyso.so myso.c
执行生成一个libmyso.so文件,按照Linux标准对象的命名惯例,应该在库名称之前加上"lib"前缀,尽管不是必须的。编译开关-fPIC代表函数符号可以重定向,-shared代表编译结果是一个标准对象。
不同于Win32DLL,Linux标准对象中的所有函数都是直接导出的,都可以被调用程序所访问。下面我们编写调用程序:
#include <stdio.h>
int main()
{
printf("Invoke my so/n");
show();
return 0;
}
保存为invoke.c,按照如下gcc开关编译:
$ gcc -o test invoke.c ./libmyso.so
编译生成test可执行文件。如上编译条件的最后一条需要是所调用的标准对象文件名,注意必须含有路径。如果只是使用libmyso.so,则必须确保 这个文件在可访问的PATH下面。本例所使用的文件名"./libmyso.so"是当前路径下的,使用了相对路径。
测试输出结果如下:
$ ./test
Invoke my so
Standard Object by gashero
相关文章推荐
- linux下c语言编程,动态链接和静态链接的理解
- linux下C++动态链接C++库示例详解
- (转载)DLL动态链接库编程入门之二:非MFC DLL
- linux下查看动态链接库so文件的依赖的相关组建
- Linux 静态链接库与动态链接库之二:动态链接库生成及使用
- linux下动态链接问题(so文件的编写与调用)
- Intel平台下Linux中 ELF文件动态链接的加载、解析及实例分析(一): 加载
- Intel平台下linux中 ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载
- Linux 添加动态链接库
- linux的动态链接库的创建和使用
- 程序的链接和装入及Linux下动态链接的实现
- 如何将arm-linux-gcc编译的动态链接helloworld在Android上运行
- linux下编译动态链接库
- 再探Linux动态链接 -- 关于动态库的基础知识
- Linux下编译出来的动态链接库缺少so后缀的问题解决
- 聊聊Linux动态链接中的PLT和GOT(1)——何谓PLT与GOT
- Linux动态链接之GOT与PLT
- 动态链接库编程范例
- Linux动态链接之四:动态链接的步骤
- linux 查看可执行文件动态链接库相关信息