【问题标题】:Is it possible to use same DLL for clients using both Windows and Linux是否可以为使用 Windows 和 Linux 的客户端使用相同的 DLL
【发布时间】:2012-04-12 04:19:33
【问题描述】:

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

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

P.S:我正在使用 CodeBlocks IDE

【问题讨论】:

  • 它肯定必须为 Linux 单独编译。

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


【解决方案1】:

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

【讨论】:

  • 谢谢,我去看看CMake
【解决方案2】:

我很确定 Linux 不会接受 .dll :) 是的,您需要重新编译。除非您在 linux 下将 windows 作为虚拟机运行,否则会抢占问题。

【讨论】:

    【解决方案3】:

    肯定不能是同一个二进制文件:Linux 上的共享对象 ELF 格式,Windows 上的 DLL "PE" 格式。动态加载在两个系统上具有不同的语义。详情见Levine's linker and loader书。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      相关资源
      最近更新 更多