我正在使用C++在Windows上编写一个程序,用户将能够以动态链接库(Windows)或共享对象文件(Linux)的形式编译扩展。 在Windows上,您可以使用LoadLibrary函数加载dll。是否可能在Windows上对.so文件执行相同操作,反之亦然,在Linux上加载.dll文件?
简短的回答是“不行”。这不是关于加载,而是关于动态库的内部格式,如预期的入口点。每个操作系统都支持自己的格式。因此它不起作用。 DLL是PE可执行文件(与Windows上的exe一样) .so通常是ELF格式(像Linux / Unix上的大多数现代可执行文件一样)。 但是在Linux上,通过Wine对PE可执行文件提供了一些支持,Wine程序可以使用DLL。但那可能不是你要找的。在Windows上,通过cygwin也支持ELF格式,并且还有一些编译器可以加载coff格式(在ELF之前在Unix上使用的格式)。我很久以前就用过DJGPP。
.so
。这可能是因为DL.dlopen()函数期望文件路径,并且.so已经包含在其中。将.dll重命名为.so可以避免拥有两组完全相同的Ruby文件。 - kriss