是否可以对同时使用Windows和Linux的客户端使用相同的DLL 我想创建一个C++库,它可以由Linux和Windows客户端使用。特定于操作系统的功能将由客户机通过实现库提供的接口连接起来

是否可以对同时使用Windows和Linux的客户端使用相同的DLL 我想创建一个C++库,它可以由Linux和Windows客户端使用。特定于操作系统的功能将由客户机通过实现库提供的接口连接起来,c++,linux,dll,window,shared-libraries,C++,Linux,Dll,Window,Shared Libraries,这有可能实现吗?我需要在Linux中重新编译C++项目吗? 注:我使用的是代码块IDE我非常确信Linux不会接受.dll:),是的,您需要重新编译。除非您在linux下以虚拟机的形式运行windows,这在某种程度上可以避免这个问题。简单的答案是否定的,否则您仍然需要为每个目标平台编译您的库——但是,假设您的代码是跨平台编写的,您可以轻松地将构建设置为同时面向Windows和Linux环境。我现在使用CMake为Windows环境生成Visual Studio项目,并为Linux环境生成Mak

这有可能实现吗?我需要在Linux中重新编译C++项目吗?
注:我使用的是代码块IDE

我非常确信Linux不会接受.dll:),是的,您需要重新编译。除非您在linux下以虚拟机的形式运行windows,这在某种程度上可以避免这个问题。

简单的答案是否定的,否则您仍然需要为每个目标平台编译您的库——但是,假设您的代码是跨平台编写的,您可以轻松地将构建设置为同时面向Windows和Linux环境。我现在使用CMake为Windows环境生成Visual Studio项目,并为Linux环境生成Makefiles

它当然不能是相同的二进制文件:Linux上的共享对象ELF格式,Windows上的DLL“PE”格式。动态加载在两个系统上具有不同的语义。详见本书

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

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

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


您可能想阅读(至少是Linux版)。

它肯定必须为Linux单独编译。谢谢,我将看一看CMake