我希望创建一个可供Linux和Windows客户端使用的C ++库。客户端通过实现库提供的接口来连接特定于操作系统的功能。
这有可能实现吗?我是否需要在linux中重新编译C ++项目。
P.S:我正在使用CodeBlocks IDE
答案 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)。