技术解析

请教一下有没有什么方式可以实现在 Windows 上完成编译只有在类 Unix 上配置环境的项目
0
2021-06-03 22:29:41
idczone

完整的背景是这样的: 一个 Android 项目,非常大,底层全是 C++,由于用到了一些比较特殊的编译选项,目前测试下来只有 Linux/Mac 上面配置起来比较省心,尝试过 MinGW 以及 Cygwin,都遇到了不太好解决的问题,因此之前的解决方案一直是在 Linux 上面去编译。 最近因为新采购了一台 Windows 机器 (i9 + 32G + 1T SSD),而公司 VPN 又只有 Windows/Mac 上面可以用,因此又动了点心思想看看能不能实现想要的效果。

目前想到的解决方案:

  1. 使用 WSL2 + Ubuntu 20.04 ,不知道是否能达到使用 Windows 上的 Android Studio,但是编译时使用 WSL 内部的环境?(正在尝试,但感觉有点困难,VSCode 看了下可以实现,但是配置 Android 开发环境还是有点麻烦的)

  2. 使用 WSL2 + Ubuntu 20.04 ,在 WSL 内安装完整的 GNOME 环境,使用 WSL Ubuntu 内的 Android Studio 进行编码。(网络环境简单,但 WSL2 加上 GNOME,稳定性确实有些让人担忧)

  3. 使用 Win国外服务器dows + VirtualBox(Ubuntu 20.04) 来实现网络从 Windows 实体机上走,写代码时使用 VirtualBox 内部的 Ubuntu 来编译。(肯定可行,但担心虚拟机的 CPU 以及 IO 会不会造成较大的性能损失)

  4. 使用 Ubuntu + VirtualBox(Windows) 来实现网络从 Windows 虚拟机走,写代码使用 Ubuntu 。(没有性能损失,也没什么折腾的,但是可能存在 Policy 问题,因为网络走虚拟机的话,外部的使用公司无法监控)

不知道大家有什么想法或建议,还请不吝赐教,提前感谢!


编译时没必要用 as,在 wsl 里装好 sdk/ndk 直接用就行。

这也是一种方案,但是这样会失去在 UI 上直接断点的能力,用 gdb 有点蛋疼...

为什么会?编译和运行是完全无关的过程,你之前怎么调试的还是怎么调试。

谢谢提醒,我先尝试一下。
我理解在 AS 中要实现跳转等等功能是需要先编译出一些 symbol 才可以的,不确定是否在 WSL 中编译产出的 symbol 也可以被 Windows 上的 AS 正确 load ?

你指的是调试符号么?这个格式都是通用的啊,只要编译的时候生成,运行时被调试器加载就可以了。不过你可能需要设置使用 relative path,因为调试器需要从里面读出哪一步对应到源码的哪一行,如果读出来的源码路径 IDE 找不到自然就没法下断点。

明白了,非常感谢!

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服