西安網(wǎng)絡(luò)公司網(wǎng)站建設(shè)小紅書(shū)推廣平臺(tái)
1、docker內(nèi)部只有wget以及git命令
項(xiàng)目需要,得更新docker容器中的gcc和LLVM版本但是由于沒(méi)有預(yù)先安裝apt、apt-get以及yum,導(dǎo)致很多安裝過(guò)程就是雞生蛋蛋生雞反應(yīng)。暫時(shí)沒(méi)有找到合適的解決的方法,如果有大佬知道的話,歡迎留言哈(跪謝😉)
目前的解決方案就是繞過(guò)常規(guī)的shell腳本或者apt命令,直接從github上拉去源碼進(jìn)行本地的編譯安裝。
環(huán)境:
- Win11-WLS2-Ubuntu20.04
- Docker
2、安裝gcc(trunk)版本
首先在github上克隆下gcc的項(xiàng)目:
git clone https://github.com/gcc-mirror/gcc.git
接著,按照參考資料說(shuō)是要安裝flex依賴,但是我已經(jīng)裝過(guò)了(況且我也沒(méi)有flex就是了),此步驟因人而異:
apt install flex
然后就是進(jìn)入下載的項(xiàng)目目錄進(jìn)行一些必要的配置:
cd gcc
./contrib/download_prerequisites
下一步需要自己構(gòu)建build
文件夾,進(jìn)入并在其中進(jìn)行一些配置:
mkdir build && cd build
配置這邊我是參考的教程,但是應(yīng)該是可以自己定義一些私人化設(shè)置的
../configure -v \--build=x86_64-linux-gnu \--host=x86_64-linux-gnu \--target=x86_64-linux-gnu \--enable-checking=no \--enable-languages=c,c++ \--disable-multilib \--prefix=/usr/local \--disable-bootstrapmake -j$(nproc)
最后執(zhí)行安裝:
make install
安裝成功(貌似)
gcc的安裝路徑為usr/local/bin
3、安裝LLVM
3.1 編譯安裝版本
步驟:
1、 拉取LLVM項(xiàng)目并進(jìn)入項(xiàng)目目錄
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
2、創(chuàng)建并進(jìn)入build文件夾
mkdir build && cd build
3、一些編譯選項(xiàng)
具體參數(shù)含義官方有給英文解釋,具體也可以參考這篇回答
cmake -G Ninja -DCMAKE_BUILD_TYPE="Release" -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" ../llvm
4、用ninja開(kāi)始編譯
ninja && ninja install -j1# 這里可以根據(jù)自己虛擬機(jī)分配的內(nèi)核數(shù)量將1改為2、3、4……但是基于拉跨的內(nèi)存,設(shè)置為1了就
于是開(kāi)始了漫長(zhǎng)的等待,(大概是一個(gè)多小時(shí),具體要看計(jì)算機(jī)性能了
5、最后檢驗(yàn)一下自己是否安裝成功
echo $? # 輸出0表示編譯過(guò)程沒(méi)有出錯(cuò)
echo $PATH # 表示安裝路徑
llvm-as --version # 顯示版本
我們可以進(jìn)入安裝目錄查看安裝結(jié)果:
3.1.1 遇到的BUG
c++: fatal error: Killed signal terminated program cc1plus compilation terminated.
遇到的問(wèn)題是內(nèi)存不足的問(wèn)題
3.1.1.1 失敗的嘗試——在docker容器內(nèi)重新設(shè)置swap大小
退出容器,用最高權(quán)限重新激活進(jìn)入容器
docker run -it --privileged=true mydce:v1.4 bash
運(yùn)行以下命令:
可以看到,并沒(méi)有改變?nèi)萜鲀?nèi)的實(shí)際分區(qū)大小
3.1.1.2 成功的嘗試——在docker容器外重新設(shè)置swap大小
可以看到確實(shí)有改變了虛擬機(jī)的swap空間,下面激活容器看看容器有無(wú)變化
可以看到,docker容器內(nèi)的swap分區(qū)也增加了(看來(lái)是伴隨虛擬機(jī)的主設(shè)置的🤣)
虛擬機(jī)中運(yùn)行的命令具體如下:
sudo su
dd if=/dev/zero of=/swapfile bs=1G count=16
#空間大小是bs*count=16G,可以改成自己想要的,一開(kāi)始設(shè)置為6,但是進(jìn)度3/4的時(shí)候又報(bào)同樣的錯(cuò)誤了
mkswap /swapfile
chmod 0600 /swapfile
swapon /swapfile
#使用剛才創(chuàng)建的swap空間
3.1.1.3 WLS空間不夠的問(wèn)題
誰(shuí)知道呢,安裝完LLVM之后,再裝GCC結(jié)果中途報(bào)錯(cuò)退出,再看C盤,直接200G內(nèi)存給我干沒(méi)了(于是狼狽開(kāi)始清理WLS2占用的C盤空間)
罪魁禍?zhǔn)?#xff1a;
diskpart
select vdisk file="C:\Users\moumo\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
但是效果不明顯2333,嘗試了多次,甚至一氣之下刪除ubuntu所有鏡像文件再執(zhí)行相關(guān)命令還是無(wú)用,只能含淚刪除ubuntu子系統(tǒng)(需要在cmd中取消注冊(cè)的),將C盤下的硬盤映像文件一并刪除(好了,重裝了適合15.0的ubuntu18.04版本,準(zhǔn)備繼續(xù)開(kāi)坑)
3.2 pre-build版本
由于沒(méi)有找到對(duì)應(yīng)Ubuntu20.04版本的,所以沒(méi)有使用,具體可以查看官網(wǎng)
參考資料
- 安裝GCC trunk 版本
- 編譯安裝LLVM(1)
- 編譯安裝LLVM(2)
- 設(shè)置分區(qū)
- 設(shè)置分區(qū)以及減少進(jìn)程數(shù)量
- 管理WSL中的磁盤大小
- WSL2-ubuntu20.04安裝LLVM 15 記錄貼
- LLVM編譯出現(xiàn)的問(wèn)題
- WLS2磁盤清理