導航:首頁 > 源碼編譯 > 使用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進行交叉編譯相關的資料

熱點內容
華為的隱藏相冊無法加密 瀏覽:774
聯通套餐app怎麼設置 瀏覽:748
關於刪除鏈表的演算法描述 瀏覽:889
標准盤和壓縮盤的區別 瀏覽:42
銀行存款驗證碼JAVA編程 瀏覽:106
word轉pdf軟體免費版 瀏覽:137
公主連結安卓台服怎麼下載 瀏覽:540
注冊江蘇銀行app怎麼注冊 瀏覽:796
中興怎麼下載app視頻 瀏覽:673
伺服器審計是什麼 瀏覽:514
華為刪除的app怎麼徹底卸載 瀏覽:570
編程時調試快捷鍵 瀏覽:4
安卓手機玩亞服怎麼下載 瀏覽:337
思域壓縮機多少錢 瀏覽:691
程序員代碼合適嗎 瀏覽:282
復利計演算法律保護 瀏覽:741
代號f2伺服器連接失敗怎麼搞 瀏覽:960
旋律雲我的世界伺服器靠譜嗎 瀏覽:67
pdf降低大小 瀏覽:235
魔獸世界中文如何外服伺服器 瀏覽:932