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