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

Is it possible to use same DLL for clients using both Windows and Linux

本文关键字:客户端 DLL Linux 是否 Windows      更新时间:2023-10-16

我希望创建一个可供Linux和Windows客户端使用的C++库。操作系统特定的功能将由客户端通过实现库提供的接口来连接。

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

p.S:我正在使用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)。

相关文章: