如何准备在单个 Windows 环境中生成 .dll 和 unix .so 的构建作业?
Posted
技术标签:
【中文标题】如何准备在单个 Windows 环境中生成 .dll 和 unix .so 的构建作业?【英文标题】:How to prepare a build job that produces .dll and unix .so on single Windows environment? 【发布时间】:2013-05-14 09:40:59 【问题描述】:如何创建一个 C++ 单一构建作业,生成在 Windows 上工作的 .dll 和在 Unix 上工作的 .so 准备工作?
假设我们的开发环境是基于Windows的。
【问题讨论】:
您的代码是否已经在 Linux 上编译,或者您是否正在寻找一种工具可以让您的 Windows 代码在 Linux 上运行而无需进行移植工作? 【参考方案1】:在 Unix 或 Linux 上,您的共享库需要链接到像 /lib64/libc.so.6
和 /lib64/ld-linux-x86-64.so.2
这样的系统库。如果这是您所要求的,则无法在 Windows 上链接这些(除非您在 Windows 上部署了 Linux 交叉编译工具链,如果存在的话)。您需要在目标操作系统上编译它。
【讨论】:
很好,我也想过虚拟机解决方案,但真的不知道这是什么大问题【参考方案2】:我会给你一些简单的解决方案。请仅将其视为一个想法。我从来没有这样做过。但我认为从逻辑上讲这应该是可能的。
-
在 Windows 环境中开始您的工作。
您必须使用预处理器指令编写支持 windows 和 Unix 的代码。
创建两个支持 windows 和 Unix 的 make 文件(make_win、make_uni)。实际上,您也可以在单个 make 文件中执行此操作。
在windows环境下安装Oraclevirtual box。
在虚拟机上安装fedora-18。
现在您可以通过 windows 和 Fedora 两种操作系统同时访问您的 make 文件(只需您可以使用两种操作系统访问相同的文件系统)。
使用 windows 运行 make_win,使用 fedora 运行 make_uni。
注意:您可以选择在Linux环境下工作,并且可以在上面安装virtual-box和windows top。
这些东西可以帮助你 http://geekery.amhill.net/2010/01/27/virtualbox-with-existing-windows-partition/ http://www.giannistsakiris.com/index.php/2008/04/09/virtualbox-access-windows-host-shared-folders-from-ubuntu-guest/
【讨论】:
【参考方案3】:使用 minGW 并为 linux 和 windows 准备代码
http://www.mingw.org/
【讨论】:
我查看了由g++ --shared a.cpp -o a.so
生成的二进制 .so 文件,它包含例如“stdarg.h windef.h stddef.h winnt.h stdio.h”,所以这是一个重命名为的 .dll .so,我是对的?
我知道反之亦然,使用 linux 主机系统并使用 GCC + MinGw 交叉编译 windows。我不知道是否有可用于在 Windows 主机系统上交叉编译 linux .so 的工具链(我对此表示怀疑)。【参考方案4】:
可能是 Cygwin 环境允许一些交叉编译技巧:Cross compiling for linux from Cygwin
我自己没有对此进行测试,但可以想象一些构建过程会分开,例如MinGw 构建 Windows .dll 和 Cygwin 以及用于 .so 的交叉编译工具 ...
结果可能是(取决于您的实际用例)只需使用 VM 在 Linux/Unix 系统上编译并共享用于编译的纯源代码(例如,使用 CMake + GCC + MinGw [for Windows only] as统一的构建环境,甚至从linux系统交叉编译Windows .dll)更好地为您服务。
【讨论】:
【参考方案5】:是的,CMake 可以做到这一点 :) 您需要培养编写体面的 cmake 规则的技能,但是当您掌握它时,您可以使用一个小的构建命令轻松地进行交叉构建。此外,我建议您将 Jenkins 与您的 CMake 一起使用,这可以与 CTest 和 CPack 链接,您将拥有一个很棒的开发地牢:)
【讨论】:
如果没有合适的 windows 下交叉编译器,即使 CMake 也无法为 linux 编译。您可以使用 CMake 创建在任何平台 linux 和 windows 上都能正常工作的构建环境。但这不是 OP 的问题,对吧? 我使用 CMake 和 gcc 在同一个机器上交叉构建 Windows 和 Linux 代码。【参考方案6】:必须对源代码进行返工。另外如果使用MinGW,我们可以最大限度地减少返工。但是如果我们使用微软编译器,返工更多,必须使用单独的make文件。
【讨论】:
以上是关于如何准备在单个 Windows 环境中生成 .dll 和 unix .so 的构建作业?的主要内容,如果未能解决你的问题,请参考以下文章
如何比较多列,并在单个新列中生成值,在 Pandas 中使用 Apply 函数
如何在 1 个单个 div 中生成 *ngFor 循环项,而不是每个项目周围都有一个 div 容器