Linux动态链接库编程入门

本文介绍了Linux标准对象(.so文件)的基本概念,并通过一个简单的示例详细解释了如何创建和使用Linux标准对象。示例中包含了一个简单的函数,并演示了如何通过GCC编译器进行编译、链接和调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

下面通过一个简单的例子开始介绍Linux标准对象。

我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下:

 

#include

#include

 

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

 

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

很郁闷,昨天把一个盘搞没了,我的linux虚拟机,学习资料都化为乌有,这下好了一了百了,认真看书advanced  programming in the unix environment  ,整了好就都没找到像write,fork这样的系统和fopen和C等的一些库函数源代码哪里有,超级郁闷,神啊救救我!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值