是否可以为同时使用Windows和Linux的客户端使用相同的DLL
Is it possible to use same DLL for clients using both Windows and Linux
我希望创建一个可供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)。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 如何从客户端为COM服务器设置dll搜索路径?
- 具体的模板正文,它在 dll 中并在客户端中调用
- DLL – 在 DLL 初始化时填充的静态向量,向客户端程序返回零大小
- 使用ACE_dll动态加载客户端C++dll,错误为未处理的异常
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在 DLL 中完成分配时释放客户端中的内存
- 在DLL客户端中使用dllimport时出错
- 在构建dll时,我需要在客户端的标头中提供多少个父级作为__declspec(导出)
- 如果在 DLL/Lib 中定义了对象,是否可以在客户端中实例化对象?
- 将 c# asp.net Web 应用程序与C++ dll 链接时,是在服务器或客户端上运行的 dll 代码
- 一个C++客户端无法使用我们新的 COM 注册的 .NET .dll加载,另一个客户端可以正常工作
- 是否可以为同时使用Windows和Linux的客户端使用相同的DLL
- 如何在客户端实现在DLL中声明的方法
- 在Microsoft Visual c++ 2015中编译DLL -警告C4251需要有DLL接口供类的客户端使用-当使
- 命名管道c#服务器c++ .dll客户端不工作
- 客户端需要在他们的机器上安装OpenCv来运行c++ DLL(使用OpenCv库)吗?
- 如何在客户端PC中使用编译后的DLL而不安装Windows SDK ?
- 您是否可以拥有一个具有管理员权限的DLL,该DLL从仅具有用户级权限的客户端应用程序链接