社区
C语言
帖子详情
请问linux下的*.so文件和windows下的*.dll文件有区别吗?????
zjjysoft
2005-09-20 01:46:34
这两种文件都叫做动态链接文件,但在用于c语言进行编程的时候,他们有区别吗???
请高手帮忙回答!!!!
...全文
2383
12
打赏
收藏
请问linux下的*.so文件和windows下的*.dll文件有区别吗?????
这两种文件都叫做动态链接文件,但在用于c语言进行编程的时候,他们有区别吗??? 请高手帮忙回答!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
moonfkypm
2005-09-22
打赏
举报
回复
对于 .so 刚开始接触!
学习!
sjf331
2005-09-22
打赏
举报
回复
由于操作系统的文件系统不同,所以格式是不同的.但加载思想应该没有太大区别.
KDSwell
2005-09-21
打赏
举报
回复
第一次对动态链接库了解这么多!!
Jagen在路上
2005-09-20
打赏
举报
回复
1
在开发上来说,是有一点区别的。
.so文件没有入口函数的概念。而dll却有,虽然不是必须。
.so会导出所有在头文件中定义的符号。而dll却需要使用特殊关键字指名应该导出那些。
.so文件是elf格式的,可以不连接某些静态库,而等应用程序去连接。而dll需要连接静态库。
jixingzhong
2005-09-20
打赏
举报
回复
对于我们来说, 没有什么区别的吧 ?
我们做开发的 , 这两个基本不是都一样的 ?
jsjjms
2005-09-20
打赏
举报
回复
对于你做程序是一样的,也就是概念一样的,
但实际里面的存储之类肯定不一样了。
hundlom
2005-09-20
打赏
举报
回复
当然有区别了,不同的编译器搞出来的。
zhousqy
2005-09-20
打赏
举报
回复
不是很清楚,感觉差不多的
SuperLinux
2005-09-20
打赏
举报
回复
动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过程的一部分。在这些系统上,可执行文件包含一个叫做import directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库后确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据。这种类型的动态加载成为装载时加载 ,被包括Windows和Linux的大多数系统采用。装载程序在加载应用软件时要完成的最复杂的工作之一就是加载时链接。
其他操作系统可能在运行时解析引用。在这些系统上,可执行程序调用操作系统API,将库的名字,函数在库中的编号和函数参数一同传递。操作系统负责立即解析然后代表应用调用合适的函数。这种动态链接叫做运行时链接 。因为每个调用都会有系统开销,运行时链接要慢得多,对应用的性能有负面影响。现代操作系统已经很少使用运行时链接。
可以动态链接的库,在Windows上是dynamic link library (DLL),在UNIX或Linux上是Shared Library。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用可以使用一个库的同一份拷贝,操作系统不需要加载这个库的多个实例。
Windows 和 Linux 的加载时链接是由操作系统来完成的,格式在不同的系统下有不同的区别,但是原理还是一样的,LZ不必在这个问题上深究。
^_^
power77
2005-09-20
打赏
举报
回复
mark
仅仅是格式不同?
晨星
2005-09-20
打赏
举报
回复
但对程序员来说,应该感觉不到太多的不一样吧。
晨星
2005-09-20
打赏
举报
回复
只能说既有联系又有区别了,毕竟格式是不一样的。
Windows
进程常用
DLL
模块注入技术
课程结合多种
Windows
进程常用
DLL
注入技术。远程线程注入APC注入,异步调用过程,向目标线程插入待执行任务从而完成注入。窗口消息注入,指定窗口进程注入,与全局钩子注入类似。环境块注入,获取进程上下文信息,直接性修改程序执行流程完成注入。进程入口点注入,在程序初始化的时机前将
dll
模块
文件
注入至目标主线程。进程调试级注入,涉及调试器相关功能调用知识点
dll
模块重定位内存注入,模拟操作系统加载PE
文件
方式,直接将
dll
文件
内存数据写入目标进程并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级
Dll
模块注入技术,内核驱动入门扩展。
Linux
的.a、.so和.o
文件
以及与
windows
下的对应关系
在说明
Linux
的.a、.so和.o
文件
关系之前,先来看看
windows
下obj,lib,
dll
,exe的关系
windows
下obj,lib,
dll
,exe的关系 lib是和
dll
对应的。lib是静态链接库的库
文件
,
dll
是动态链接库的库
文件
。 所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe
文件
中,以后运行你的exe的时候不再需要li
关于
linux
下.so
文件
的认识
linux
下何谓.so
文件
:1. 用过
windows
的同学应该都知道 .
dll
文件
吧, 这二者有什么共通之处呢,其实 .so
文件
就跟.
dll
文件
差不多.// 2.一般来说.so
文件
就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class
文件
(字节码).// 3.
Linux
下的.so
文件
时不能直接运行的,一般来讲,.so
文件
称为共享库.// 4.那么.s
【.lib.
dll
/ .a.so】
Windows
和
Linux
两个系统下的库
文件
Windows
平台下:静态库后缀为.lib,动态库后缀为.
dll
Linux
平台下:静态库格式为lib**.a,动态库格式为lib**.so谈论两者
区别
之前,需要对程序编译和运行有一个大致认识:代码想要输出结果,需要经过代码编译和可执行程序运行,就是编译和运行(链接)这两步。两种类型的库在其中起着不同的作用,这也就是为什么有时候代码编译通过,但是无法运行(eg:缺失
dll
)静态库和动态库的
区别
:静态库在编译过程中就已经引用并链接到了,有问题编译这一步就会报错;
用gcc编译生成动态链接库*.so
文件
的方法。
linux
下
文件
的类型是不依赖于其后缀名的,但一般来讲: .o,是目标
文件
,相当于
windows
中的.obj
文件
.so 为共享库,是shared object,用于动态连接的,和
dll
差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la
文件
的格式 $file *.la
C语言
69,375
社区成员
243,075
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章