导航:首页 > 源码编译 > 使用wsl进行交叉编译

使用wsl进行交叉编译

发布时间:2023-01-26 12:35:55

‘壹’ 一次不正经的Remote_WSL2体验

 VSCode的Remote Development扩展正式发布也有两个月了。我正尝试将开发环境逐渐迁移到WSL,但在配置 Flutter 时,却发现WSL的一个先天硬伤:
 —— 不能运行32位ELF程序
 怎么办呢,尝试升级到 WSL2 吧......

 如果WSL安装了 zsh 之类的shell并作为默认启动,那么在使用Remote_WSL时,VSCode的扩展依赖的依旧是 bash 的环境变量配置,并不会启动zsh。
 因此,在设置如 android_HOME 、 GOPATH 之类的环境变量时,不要将自定义变量设置保存在 $HOME/.zshrc 里。

 在WSL中使用Flutter是我升级到WSL2的动因,WSL2确实解决了运行32bit程序的硬伤,但由于WSL2是完全的虚拟机环境,也产生了新的问题:
 —— android虚拟机就不能用了。

 当前WSL2预览版本的bug,不能通过shell打开 code 、 explore 之类的windows程序,等待未来版本解决。

‘贰’ Windows10上安装使用linux子系统(WSL)

Linux的Windows子系统让开发人员可以直接在Windows上运行Linux环境(包括大多数命令行工具,实用程序和应用程序),而无需建立在虚拟机的开销之上,整个系统共200多M,但包含了你能用到的所有功能,并且和windows完美互操作(省去Linux挂载本地windows分区或目录的操作),目前Linux的windows子系统已经相当完善,可当作完整linux系统使用.

您可以:

从Windows应用商店中 选择您最喜爱的Linux发行版。

运行常用的命令行实用程序,如grep,sed,awk等。

运行Bash shell脚本和Linux命令行应用程序,包括:

工具:vim,emacs,tmux

语言:Javascript / node.js,Ruby,Python,C / C ++,C#和F#,Rust,Go等

服务:sshd,MySQL,Apache,lighttpd

使用发行版的内置包管理器(apt-get)安装其他Linux工具。

从Linux控制台调用Windows应用程序。

在Windows上调用Linux应用程序。

1、打开 [控制面板]

2、找到 [程序与功能] 处的 [启用或关闭windows功能]

3、在 [适用于linux的windows子系统] 一栏处打上勾

4、点击确定并重启电脑

注:以上步骤在win10专业版上测试,win10家庭版可能不支持

使用快捷键: 微软光标键+S 搜索 "功能"

进入功能

勾选适用于Linux的Windows子系统

或者直接PowerShell中运行以下命令

​然后出现提示重新启动计算机

在应用商店搜索“Linux”,选择您喜欢的Linux版本,推荐安装Ubuntu

注意:应用商店的程序使用默认路径,不要更换到其他盘符

安装完毕后开始菜单出现Ubuntu图标

现在可以在里面进行任何和linux相关的命令

或者在Windows商店里直接启动

进入Ubuntu系统会自动初始化并安装,稍等几分钟即可

Enjoy !

切记:小心执行 mkdir -rf mnt

‘叁’ WSL 使用minicom

Windows10的串口,在WSL中也可以直接使用,其对应关系就是
COMx对应WSL的/dev/ttySx,例如COM1对应WSL的/dev/ttyS1

有了这个对应关系,在WSL中使用minicom就很方便了,例如:
minicom -D /dev/ttyS1

执行

便进入了minicom的配置界面,使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:
Serial port setup [Enter]

我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。

返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit推出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。

‘肆’ WSL避坑指南

WSL(windows subsystem for linux)是在windows系统下运行的linux子系统,当我们需要linux环境的时候,用虚拟机性能损耗会非常严重,这时候我们可以选择使用WSL。这篇文章介绍了我在安装和使用WSL中的一些坑,希望将来的人能少走弯路。

参考微软的文档 https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 安装。

我遇到的一些问题:

配制Ubuntu镜像 https://developer.aliyun.com/mirror/ubuntu

可以在windows下安装docker desktop,然后设置使用wsl2的引擎使用。

或者在docker的官网上按照教程安装docker。

静进入网址: https://cr.console.aliyun.com/cn-hangzhou/mirrors

此处需要一个阿里云的账号,没有的话可以使用支付宝登录

登录进去会跳转到 容器镜像服务,需要密码

接下来按照里面的教程进行设置即可

在windows的vscode里安装Remote WSL插件之后可以在linux的子系统中通过输入code命令使用vscode。

文件共享也非常方便,启动WSL命令行的时候,默认访问的便是我们Windows的用户目录。

而要从Windows下访问Linux中文件,则可通过网络磁盘映射:wsl$Ubuntu 路径,这样整个Linux文件系统都可以暴露给Windows。

如果要在 Linux 分发版中构建网络应用(例如,在 NodeJS 或 SQL server 上运行的应用),可以使用 localhost 从 Windows 应用(如 Edge 或 Chrome Internet 浏览器)访问它(就像往常一样)。

但是,如果运行的是较旧版本的 Windows(版本 18945 或更低版本),则需要获取 Linux 主机 VM 的 IP 地址(或 更新到最新的 Windows 版本 )。

若要查找为 Linux 分发版提供支持的虚拟机的 IP 地址,请执行以下操作:

如果要从 Linux 分发版(即 Ubuntu)访问 Windows 上运行的网络应用(例如,在 NodeJS 或 SQL 服务器上运行的应用),则需要使用主机的 IP 地址。 虽然这不是一种常见方案,但你可以执行以下步骤来使其可行。 - 通过在 Linux 分发版中运行以下命令来获取主机的 IP 地址: cat /etc/resolv.conf - 复制以下词语后面的 IP 地址: nameserver 。 - 使用复制的 IP 地址连接到任何 Windows 服务器。

当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。 这意味着你需要确保你的应用程序可以接受 LAN 连接。

例如,你可能需要将应用程序绑定到 0.0.0.0 而非 127.0.0.1 。 以使用 Flask 的 Python 应用为例,可以通过以下命令执行此操作: app.run(host=Ɔ.0.0.0') 。 进行这些更改时请注意安全性,因为这将允许来自你的 LAN 的连接。

当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。

这不是 WSL 2 中的默认情况。 WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。 目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。

WSL2 分发版目前无法访问纯 IPv6 地址。

参考资料:

https://www.jianshu.com/p/6b02948b3d37

https://www.liumingye.cn/archives/326.html

https://zhuanlan.hu.com/p/104771275?utm_source=cn.wiz.note

‘伍’ ubuntu 16 LTS 安装32交叉编译工具报错:cannot execute binary file: Exec format error

1.使用错误的命令,如gcc -c hello.c -o hello,这样得到的是.o文件,而不是可执行程序,此时使用./hello就会报上述错误!此时应改用gcc hello.c -o hello就可以啦!
2.如果不是上述错误,就可能是版本问题,如本来是32位操作系统,偏偏使用64位软件,此时需要的就是使用正确的软件版本!

‘陆’ Tuxedo中的MP,SHP和WSL

楼主写错了,应该是MP、SHM吧?
MP表示Tuxedo的主机配置方式为多机,也就是平时我们所说的集群;SHM表示主机配置方式为单机。这两个参数是在Tuxedo的配置文件*RESOURES节的MODEL那里配置。

WSL是Tuxedo服务端的监听进程,用来监听来自远程客户端的请求。当一笔Tuxedo交易开始时,远程客户端会首先与监听进程WSL建立连接,安全验证通过后,WSL就从WSH进程池里面分配给客户端一个空闲的WSH进程去处理客户端请求。WSL是在配置文件的*SERVERS节配置,配置示例如下:
WSL SRVGRP=GROUP1 SRVID=10 CLOPT="-A -- -n //10.190.10.12:3200 -m 5 -M 10 -x 10"
以上示例表示WSL在IP地址为10.190.10.12的Tuxedo主机服务器的3200端口进行监听,初始启动时启动WSH池里面有5个WSH进程,最多可以启动10个WSH进程,每个WSH进程能够同时维系10个客户端连接。

您补充的问题是关于Tuxedo全局性事务的,说实话,我不是太懂,为了能回答您的问题,我都快把《Programming an Oracle Tuxedo ATMI Application Using C》事务这块看完了。原文中是说一个事务如果能够成功提交,必须有3个前提,您问的是第2个,我的理解是Tuxedo不能同时起两个事务,不然无法全局控制事务。

如果有不明白的地方,可以继续问我:)

‘柒’ 工具:如何使用windows terminal+WSL

近日在使用Cygwin的时候查到原来 巨硬公司已开发Windows terminal工具combine终端,与此同时,通过安装WSL系统,我们可以在window下直接使用Linux,最后将window下安装具有terminal的所有软件都综合到windows terminal下面。更多知识分享请到 https://zouhua.top/

Windows terminal是Microsoft出品的工具,在GitHub上已有上千颗star了,它有太多太多功能了,这里我只用来作为综合各个terminal的工具。

‘捌’ 《使用WSL 安装Rosetta 指南》

本文为利用WSL安装Rosetta的使用教程。旨在指导Rosetta用户快速上手,少走弯路。在Windows上部署自己的Rosetta运行环境。

1.WSL安装部署
2.在 WSL中安装Ubuntu 18.04 LTS
3.配置Ubuntu环境
4.编译安装Rosetta

本指南目前完整测试过Windows10 20H2。本文档中的所有相关操作都以Windows10 版本 1903 或更高版本为基础。

在这一节中,我们将安装WSL并将其升级至WSL2

要使用安装wsl,必须先完成以下3步:

开始安装WSL

安装WSL这一步如果还有疑问,可以参考链接: 在 Windows 10 上安装适用于 Linux 的 Windows 子系统 (WSL) | Microsoft Docs

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要启用虚拟化功能才能使用此功能。

1.2.1.1在计算机BIOS中完成虚拟化功能配置

开机后,以管理员身份打开 PowerShell 并运行:

重新启动 计算机,以完成虚拟化平台功能安装。

打开 PowerShell(管理员),然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:

至此,我们已安装WSL并将其升级至WSL2

首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,进行初始化。

3.然后我们需要 为新的 Linux 分发版创建用户帐户和密码 。

现已成功安装并设置了与 Windows 操作系统完全集成的Ubunt18.04

打开已安装的Ubunt18.04,依次输入以下命令安装运行环境

运行sudo命令后,系统可能提示输入当前用户账户密码以提权运行命令

安装完成后,再次检查版本是否符合系统要求,保证安装的正确性。

TensorFlow二进制安装使用TensorFlow官方上传到pypi的二进制whl包。

安装完成后,检验TensorFlow可用性:

这一步耗时较长,输出

表示安装成功

如对本文中安装过程有疑问,欢迎在评论区评论,或 Email 联系我。

‘玖’ 最详尽教程完整介绍-Windows 的 Linux 子系统-WSL1&WSL2

必须启用“适用于 Linux 的 Windows 子系统”可选功能并重启,然后才能在 Windows 上运行 Linux 发行版。

以管理员运行Powershell(开启WSL,如已开启可跳过)

WSL 1 和 WSL 2 之间的主要区别在于,在托管 VM 内使用实际的 Linux 内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。

WSL2相比WSL1来说可以完美支持Docker。与WSL1的模拟Linux API不同的是,WSL2采用在Hyper-V虚拟机中运行的方案。可以说WSL2和原汁原味的Linux已经十分接近

不支持Docker的守护进程,但您可以使用 Docker CLI 连接到通过 Docker for Windows 或您创建的任何其他VM 运行的远程Docker守护进程

不能完全兼容systemctl, systemd等等,IO速度相对原生Linux也是大打折扣,在编译和解压方面可以很深体会到。毕竟不是真正的Linux,而是挂在Windows NT内核之上的仿Linux 系统

由于WSL 还不是原生的Linux,所以需要借助 Docker for Windows 来实现Docker(Docker for Windows 是基于Hyper-V 技术)

另外一种方式是,在WSL1中安装docker 客户端,连接 docker server, 来解决在WSL1上使用docker 的问题。(PS: Win10 的Linux 子系统是装不了 docker (服务端)的,但是可以安装客户端)

参考

WSL2 是第二代 WSL,包含在2020年5月正式发布 Windows 10 v2004 版中。相比第一代,新的 WSL2 重新设计了架构,使用真正的 Linux 内核,几乎具有 Linux 的所有完整功能。启用WSL2的 Linux 系统启动时间非常快,内存占用很少,并且,WSL 2 还可以直接原生运行 Docker,VS Code 编辑器还有 Remote-WSL 插件,相对于完整的 linux 虚拟机只是不支持 systemctl、systemd,不能直接运行图形桌面。Windows 也越来越向虚拟平台靠拢,Windows NT 内核和 Linux 内核都是运行在虚拟平台之上的,是平级的

如果发现VERSION为1,说明Ubuntu运行在WSL1下,可以升级到 WSL2。同样,WSL2也可以降级到WSL1。
wsl -l -v #查看已安装Linux版本和名称,完整命令格式:wsl --list --verbose

具体步骤参考 : https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能

wsl --set-version Ubuntu 2 #升级到WSL2,其中 Ubuntu 是已经安装的Linux名称,命令格式:wsl --set-version <Distro> <Version>

启用WSL后,通过 wsl$ 可以访问WSL文件

最初的WSL是在Windows之上模拟Linux内核,但是Windows和Linux之间存在如此基本的差异,以至于某些事情不可能以与本机Linux相同的行为实现,这意味着不可能直接在 WSL中运行 Docker Engine 和Kubernetes
在WSL1中,Docker Desktop通过Hyper-V虚拟机去运行docker环境的

升级到WSL2 之后, Docker Desktop 可以直接用 WSL2,直接运行在Linux 内核上了

通过如下设置,Docker Desktop就和WSL2分发版本进行了集成,无需在WSL中安装docker; 当然,也可以选择不与Docker Desktop集成,直接在WSL 中运行docker 容器。

启用WSL后,docker运行数据都在WSL发行版中,文件位置都只能由WSL管理

安装docker后,docker会自动创建2个发行版:

WSL发行版默认都是安装在C盘,在%LOCALAPPDATA%/Docker/wsl目录
docker的运行数据、镜像文件都存在%LOCALAPPDATA%/Docker/wsl/data/ext4.vhdx中

通过 WSL 2 集成,您仍然可以体验到与 Windows 的无缝集成,但在 WSL 中运行的 Linux 程序也可以执行相同的操作。这对于从事面向 Linux 环境的项目或为 Linux 量身定制的构建过程的开发人员产生了巨大影响。不再需要维护 Linux 和 Windows 构建脚本!例如,Docker 的开发人员现在可以在 Windows 上的 Linux Docker 守护程序上工作,使用与 Linux 计算机上的开发人员相同的工具和脚本集:

注:WSL2 Docker最爽的地方是和宿主机Win10共享network,我们在宿主机Win10使用localhost加端口号就可以访问Docker中对应container中的服务,十分方便

wsl #启动
wsl --shutdown #关闭所有正在运行的 Linux 和 WSL 2

启动 WSL2 之后,会在任务管理器中发现多了一个 虚拟机工作线程

访问wsl 文件

卸载发行版
有时候某个Linux发行版不再使用,或者是环境被搞坏需要重装,这时候我们可以卸载掉这个Linux发行版。方法如下。

‘拾’ WSL 使用教程

WSL 是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。

WSL 分为两个版本,一个是 WSL1,一个是 WSL2,WSL2 是 WSL1 的升级版,主要优势是:

WSL2 建议不要跨操作系统使用文件,若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,在存储时,使用 Linux 文件系统根目录: \\wsl$\Ubuntu-20.04\home\<user name>\Project 。

访问 WSL2 文件系统,可以运行命令 WIN+R 或在文件资源管理器地址栏中键入 \\wsl$ ,以查找相应的分发名称并访问其根文件系统。

大多数情况下我们会使用 WSL2,但在以下情况,请考虑使用 WSL1:

可以使用 localhost 从 Windows 上访问 Linux 分发版中的应用。

如果要从 Linux 分发版访问 Windows 上运行的网络应用,则需要使用主机的 IP 地址。 你可以执行以下步骤来使其可行。

当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。 这意味着你需要确保你的应用程序可以接受 LAN 连接。例如,你可能需要将应用程序绑定到 0.0.0.0 而非 127.0.0.1 。

当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。

这不是 WSL 2 中的默认情况,WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。 目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。下面是一个示例 PowerShell 命令,用于添加侦听主机上的端口 4000 的端口代理并将其连接到端口 4000,并使用 IP 地址 192.168.101.100 连接到 WSL 2 VM。

使用 wsl <Linux命令> 可以在 CMD 或 PowerShell 运行 Linux 命令,示例:

以这种方式运行的命令使用的是同一个工作目录,并且以 WSL 默认用户的身份运行,拥有与调用方进程和终端相同的 Windows 管理权限。

WSL 可以使用 [tool-name].exe 直接从 WSL 命令行运行 Windows 工具。 例如, notepad.exe 。

以这种方式运行的应用程序具有相同的工作目录,拥有与 WSL 进程相同的权限,以活动 Windows 用户的身份运行,显示在 Windows 任务管理器中。

WSL 还有一些高级用法,比如更改磁盘大小,文件权限,环境变量等,具体配置可以参考官方文档。

阅读全文

与使用wsl进行交叉编译相关的资料

热点内容
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382
android检查是否安装 浏览:375
苹果手机编辑pdf文件 浏览:460
android系统名字 浏览:971
安卓手机如何进去有求必应屋 浏览:434
指数除法运算法则底数不同 浏览:896
90压缩干粮09压缩干粮 浏览:516
android线程池框架 浏览:481
手机自带解压能解压哪些文件 浏览:804
linux安装hba驱动 浏览:119
java构造函数new 浏览:668
怎么查家里电器耗电量app 浏览:506
原神一直显示重新连接服务器怎么办 浏览:826
一般用途轴流式压缩机 浏览:926
没学历的怎么学编程 浏览:901