是否可以使用Windows和Linux的客户端使用相同的DLL

我正在创build一个可以被Linux和Windows客户端使用的C ++库。 操作系统特定的function将通过实现库提供的接口而被客户端连接起来。

这可能实现吗? 我需要在Linux中重新编译C ++项目吗?

PS:我正在使用CodeBlocks IDE

简短的答案是否定的,你仍然需要为每个目标平台编译你的库 – 不过,假设你的代码是跨平台编写的,你可以设置你的构建,以针对Windows和Linux环境, 。 我现在使用CMake来为Windows环境生成Visual Studio项目,为Linux环境生成Makefiles。

我非常有信心,Linux不会接受.dll :)是的,你将需要重新编译。 除非你在linux下运行windows作为一个虚拟机,这种抢先的问题。

它当然不能是相同的二进制文件:Linux上的共享对象ELF格式,Windows上的DLL“PE”格式。 而动态加载在两个系统上都有不同的语义。 有关详细信息,请参阅Levine的链接器和加载器手册。

如果仔细地做,可以使用相同的源代码给出两个不同的文件(Windows上的DLL,Linux上的动态共享对象)。

但是,你可能会需要一些像#ifdef WINDOWS等条件编译技巧…

你可能会使用库来为你提供一个通用的抽象。 例如,GTK / Glib和Qt都有一些机制给出了动态链接(或动态加载 – 即dlopen -ed)库的通用抽象。

您可能要阅读程序库Howto (至少对于Linux)。