1、docker内部只有wget以及git命令
项目需要,得更新docker容器中的gcc和LLVM版本但是由于没有预先安装apt、apt-get以及yum,导致很多安装过程就是鸡生蛋蛋生鸡反应。暂时没有找到合适的解决的方法,如果有大佬知道的话,欢迎留言哈(跪谢😉)
目前的解决方案就是绕过常规的shell脚本或者apt命令,直接从github上拉去源码进行本地的编译安装。
环境:
- Win11-WLS2-Ubuntu20.04
- Docker
2、安装gcc(trunk)版本
首先在github上克隆下gcc的项目:
git clone https://github.com/gcc-mirror/gcc.git
接着,按照参考资料说是要安装flex依赖,但是我已经装过了(况且我也没有flex就是了),此步骤因人而异:
apt install flex
然后就是进入下载的项目目录进行一些必要的配置:
cd gcc
./contrib/download_prerequisites
下一步需要自己构建build
文件夹,进入并在其中进行一些配置:
mkdir build && cd build
配置这边我是参考的教程,但是应该是可以自己定义一些私人化设置的
../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)
最后执行安装:
make install
安装成功(貌似)
gcc的安装路径为usr/local/bin
3、安装LLVM
3.1 编译安装版本
步骤:
1、 拉取LLVM项目并进入项目目录
git clone https://github.com/llvm/llvm-project.git
cd llvm-project
2、创建并进入build文件夹
mkdir build && cd build
3、一些编译选项
具体参数含义官方有给英文解释,具体也可以参考这篇回答
cmake -G Ninja -DCMAKE_BUILD_TYPE="Release" -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" ../llvm
4、用ninja开始编译
ninja && ninja install -j1# 这里可以根据自己虚拟机分配的内核数量将1改为2、3、4……但是基于拉跨的内存,设置为1了就
于是开始了漫长的等待,(大概是一个多小时,具体要看计算机性能了
5、最后检验一下自己是否安装成功
echo $? # 输出0表示编译过程没有出错
echo $PATH # 表示安装路径
llvm-as --version # 显示版本
我们可以进入安装目录查看安装结果:
3.1.1 遇到的BUG
c++: fatal error: Killed signal terminated program cc1plus compilation terminated.
遇到的问题是内存不足的问题
3.1.1.1 失败的尝试——在docker容器内重新设置swap大小
退出容器,用最高权限重新激活进入容器
docker run -it --privileged=true mydce:v1.4 bash
运行以下命令:
可以看到,并没有改变容器内的实际分区大小
3.1.1.2 成功的尝试——在docker容器外重新设置swap大小
可以看到确实有改变了虚拟机的swap空间,下面激活容器看看容器有无变化
可以看到,docker容器内的swap分区也增加了(看来是伴随虚拟机的主设置的🤣)
虚拟机中运行的命令具体如下:
sudo su
dd if=/dev/zero of=/swapfile bs=1G count=16
#空间大小是bs*count=16G,可以改成自己想要的,一开始设置为6,但是进度3/4的时候又报同样的错误了
mkswap /swapfile
chmod 0600 /swapfile
swapon /swapfile
#使用刚才创建的swap空间
3.1.1.3 WLS空间不够的问题
谁知道呢,安装完LLVM之后,再装GCC结果中途报错退出,再看C盘,直接200G内存给我干没了(于是狼狈开始清理WLS2占用的C盘空间)
罪魁祸首:
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所有镜像文件再执行相关命令还是无用,只能含泪删除ubuntu子系统(需要在cmd中取消注册的),将C盘下的硬盘映像文件一并删除(好了,重装了适合15.0的ubuntu18.04版本,准备继续开坑)
3.2 pre-build版本
由于没有找到对应Ubuntu20.04版本的,所以没有使用,具体可以查看官网
参考资料
- 安装GCC trunk 版本
- 编译安装LLVM(1)
- 编译安装LLVM(2)
- 设置分区
- 设置分区以及减少进程数量
- 管理WSL中的磁盘大小
- WSL2-ubuntu20.04安装LLVM 15 记录贴
- LLVM编译出现的问题
- WLS2磁盘清理