docker容器内安装gcc(trunk 最新版本)以及LLVM
WLS2虚拟ubuntu20.04环境下编译安装GCC以及LLVM
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-bootstrap
make -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;compiler-rt" -DLLVM_BUILD_LLVM_DYLIB=ON -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_EN=ON -DCMAKE_INSTALL_PREFIX="/usr" ../llvm
有一个选项,看到新的安装教程里面没有:
-DLLVM_ENABLE_RTTI=ON
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版本的,所以没有使用,具体可以查看官网
参考资料
更多推荐
所有评论(0)