我正在用C ++编写Windows程序,用户可以用动态链接库(windows)或共享对象文件(linux)的形式编译扩展。
在Windows上,使用LoadLibrary
函数加载dll。是否可以对Windows上的.so文件执行相同的操作,反之亦然,在linux上加载.dll文件?
答案 0 :(得分:5)
简短的回答是“不”
这不是关于加载,而是关于动态库的内部格式,如预期入口点。每个操作系统都支持它自己的格式。因此它不会起作用。
然而,在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操作系统。