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

时间:2012-03-28 14:38:15

标签: c++ linux dll window shared-libraries

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

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

P.S:我正在使用CodeBlocks IDE

3 个答案:

答案 0 :(得分:4)

简短的回答是否定的,您仍然需要为每个目标平台编译库 - 但是,假设您的代码是跨平台编写的,您可以将您的构建设置为针对Windows和Linux环境小心翼翼。我现在使用CMake为Windows环境生成Visual Studio项目,为Linux环境生成Makefile。

答案 1 :(得分:2)

我非常有信心Linux不接受.dll :)是的,你需要重新编译。除非您在Linux下将Windows作为虚拟机运行,否则会出现问题。

答案 2 :(得分:1)

它肯定不能是相同的二进制文件:Linux上的共享对象ELF格式,Windows上的DLL“PE”格式。动态加载在两个系统上都有不同的语义。有关详细信息,请参阅Levine's linker and loader手册。

如果仔细完成,您可以使用相同的源代码提供两个不同的文件(Windows上的DLL,Linux上的动态共享对象)。

但您可能需要一些条件编译技巧,如#ifdef WINDOWS等......

您可以使用库为这些事物提供通用抽象。例如,GTK / Glib和Qt都有一些机制可以动态链接(或动态加载 - 即dlopen - )库。

您可能想要阅读Program Library Howto(至少对于Linux)。