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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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的。

win32 动态链接库标准写法 对于引入一个动态链接库函数声明可以有两种写法:一种是在调用程序中使用extern int add(int x,int y)的方式或者_declspec(importdll) int add(int x,int y)的方式;也可以使用#include "*.h"的方式(后面这种方式是比较标准的写法)。该资源包含了创建一个动态链接库和该链接库的测试程序。 立即下载

相关推荐

《链接装载与库》第七章——动态链接

将程序的模块互相分割开,不让它们静态地链接在一起;即不对那些组成程序的目标文件进行链接,等到程序运行时再链接。有如Program1和Program2两个程序,并假定保留了Program1.o、Program2.o和Lib.o三个文件。当我们需要运行Program1这个程序时,系统首先加载 Program1.o,而系统发现Program1.o中用到了Lib.o,即Program1.o依赖于Lib.o,此时系统加载Lib.o,并将其加载至内存。所有需要的目标文件加载完毕后,若依赖关系满足,即所有的依赖文件都在磁

yelvens的博客 6563

Linuxgcc生成和使用静态库和动态库详解

Linuxgcc生成和使用静态库和动态库详解(原文链接) 本文在原文的基础上做一些详细验证,部分稍有改动, 一、基本概念 1.1什么是库 1.2库的种类 1.3库存在的意义 1.4库文件是如何产生的在linux下 1.5库文件是如何命名的,有没有什么规范 1.6如何知道一个可执行程序依赖哪些库 ... 二、用gcc生成静态和动态链接库的示例

分享Android应用和系统开发、音视频编码、性能优化相关知识 1万+

Linux中的动态库和静态库(.a.la.so.o)

Linux中的动态库和静态库(.a/.la/.so/.o) 原文地址:https://www.cnblogs.com/findumars/p/5421910.html 在windows下,一般可以通过文件的后缀名来识别文件的类型。在Linux下大致上也是可以的。但是要明确的一点是,在linux下,文件的后缀与文件的类型是没有必然的联系的。这只是约定俗称的习惯罢了。 在lin...

行者三个石的博客 2万+

Linux动态链接库编程入门

Linux动态链接库编程入门 转:http://blog.csdn.net/yang_rong_yong/article/details/3090212 动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩

hgy2011的专栏 711

Linux 动态链接库编程入门

来源: ChinaUnix博客   作者: ChinaUnix博客 动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就 是几个DLL文档构成。这种技术在Linu...

agol83082486的博客 122

linux 编写动态库(转)

  Linux动态链接库编程入门 动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。 下面通过一个简单的例子开始介绍Linux标准对象。 我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编

龙宇网的专栏 3438

linux下的动态链接库编程

 动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下 也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export 导出符号,只需要编译器设置即可。如下: #incl

howema的专栏 694

Linux 动态链接库编程基础

Linux动态链接库编程入门 动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。  下面通过一个简单的例子开始介绍Linux标准对象。  我们的标准对象文件含有一个函数,不需要声明export导出符

yang_rong_yong的专栏 3353

unix linux 调用动态链接库动态链接库的生成

动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是几个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象Standard Ojbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下: #inclu

unix/linux学习 1854

linux 动态链接库 指定,Linux动态链接库

动态链接库是一种通用的软件组件技术,是多种操作系统中提供基本服务的方式。比如Win32内核就是3个DLL文件构成。这种技术在Linux操作系统下也有对应的实现,就是Linux标准对象StandardOjbect,对应的文件扩展名为.so。下面通过一个简单的例子开始介绍Linux标准对象。我们的标准对象文件含有一个函数,不需要声明export导出符号,只需要编译器设置即可。如下:#include #...

weixin_39874269的博客 656
上一篇: 恢复Linux操作系统的GRUB引导程序
下一篇: gashero的mod_python开发经验
gashero
博客等级 码龄21年 150粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值