我有一个库,在编译时正在构建一个名为libEXAMPLE.so(在so.le文件夹中)的共享对象,以及一个名为EXAMPLE.so的dll(在dll文件夹中)。这两个共享对象的大小非常相似,看起来完全相同。在互联网上搜索显示,程序使用dll进行符号解析的方式与使用共享对象的方式可能存在差异。
你能帮助我理解这个吗?
答案 0 :(得分:5)
“DLL”就是windows喜欢命名动态库的方式
“SO”是linux如何命名他们的动态库
两者都有相同的目的:动态加载。
Windows使用PE二进制格式,Linux使用ELF。
PE: http://en.wikipedia.org/wiki/Portable_Executable
ELF: http://en.wikipedia.org/wiki/Executable_and_Linkable_Format
答案 1 :(得分:0)
我想是Linux操作系统。
在Linux中,静态库(.a,也称为归档文件)用于在编译时进行链接,而共享库(.so)用于在加载时和运行时进行链接。
在您的情况下,尽管这两个文件完全相同,但由于某种原因,该库似乎区分了在加载时链接的文件(libEXAMPLE.so)和在运行时链接的文件(EXAMPLE.so)。>