linux下的动态链接库编程
来源:互联网 发布:淘宝网买电脑可靠吗 编辑:程序博客网 时间:2024/05/24 15:43
动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如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下的动态链接库编程
- Linux下的静态链接库和动态链接库编程
- linux 下的动态链接库
- linux下的动态链接库
- linux下动态链接库的使用方法
- Linux下的动态链接库
- Linux下的动态链接库
- Linux下的动态链接库
- Linux下动态链接库的编写
- linux下的动态链接库
- linux下的动态链接库(DLL)
- linux下的动态链接库
- linux下GCC动态库的链接
- Linux下动态链接库的编写
- LINUX下动态链接库的使用
- Linux下动态链接库的使用
- linux 下动态链接库的使用
- LINUX下动态链接库的创建
- 利用事件对象实现线程同步
- VC添加菜单项运行后显示为灰色
- C#中类和结构的比较
- 代码管理
- lucene 源代码的分析(search部分)
- linux下的动态链接库编程
- 博客开通
- 使用C#把Excel格式文件的数据导入到sqlserver中
- 五子棋(API编写)
- Spring 的优秀工具类盘点,第 1 部分: 文件资源操作和 Web 相关工具类
- 深入分析java中webwork中的文件上传机制
- 《Pro Spring》学习笔记之Introductions引用实例
- 关于java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisit
- sed 用法介绍