在Windows上使用.so和.dll

时间:2010-07-13 02:24:55

标签: c++ dll object shared

我正在用C ++编写Windows程序,用户可以用动态链接库(windows)或共享对象文件(linux)的形式编译扩展。

在Windows上,使用LoadLibrary函数加载dll。是否可以对Windows上的.so文件执行相同的操作,反之亦然,在linux上加载.dll文件?

3 个答案:

答案 0 :(得分:5)

简短的回答是“不”

这不是关于加载,而是关于动态库的内部格式,如预期入口点。每个操作系统都支持它自己的格式。因此它不会起作用。

  • DLL是一个PE可执行文件(与windows上的exe一样)
  • .so通常是ELF格式(与Linux / Unix上的大多数现代可执行文件一样)。

然而,在Linux上,通过Wine可以支持PE可执行文件,而Wine程序可以使用DLL。但那可能不是你想要的。

在Windows上,还有一些通过cygwin支持ELF格式,并且还有一些编译器可以加载coff格式(在ELF之前在Unix上使用的格式)。很久以前我就用DJGPP了。

答案 1 :(得分:2)

DLL和SO基本上是不同的格式,所以简而言之,不,你不能在Linux上加载DLL或在Windows上加载SO。

答案 2 :(得分:2)

AFAIK,他们认为Windows和Linux处理共享函数调用的方式非常不同(变量如何存储在堆栈中,对于一个),因此.so文件在Win32平台上不起作用,并且.dll将不起作用Linux操作系统。