关闭

Linux动态链接库(标准对象)编程入门

597人阅读 评论(0) 收藏 举报

Linux动态链接库编程入门

    动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。

    下面通过一个简单的例子开始介绍Linux标准对象。
    我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下:

#include <stdio.h>
#include <stdlib.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

    希望上文的例子可以对大家有所帮助,这也是我的毕业设计题目,待我完成之后会有一份更加完整的文档介绍Win32DLL和Linux.so的。
0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:111970次
    • 积分:1227
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:54篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论