docker容器内安装gcc(trunk 最新版本)以及LLVM

news2024/9/29 1:18:31

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" ../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版本的,所以没有使用,具体可以查看官网

参考资料

  1. 安装GCC trunk 版本
  2. 编译安装LLVM(1)
  3. 编译安装LLVM(2)
  4. 设置分区
  5. 设置分区以及减少进程数量
  6. 管理WSL中的磁盘大小
  7. WSL2-ubuntu20.04安装LLVM 15 记录贴
  8. LLVM编译出现的问题
  9. WLS2磁盘清理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZeroTier实现内网穿透详细教程,无需公网IP,实现异地组网

ZeroTier实现内网穿透详细教程,无需公网IP,实现异地组网ZeroTier1.官网注册账号,创建自己的局域网段2.点击创建好的网络,进入设置界面进行设置3.下载客户端,安装客户端,然后连接到网络中4.加入网络成功后&a…

pocsuite3安装及使用

pocsuite3安装及使用简介项目地址环境配置及安装环境要求安装(详情可以参考[https://pocsuite.org/](https://pocsuite.org/))使用方法运行模块加载目标参数:Console模式查看有哪些模块使用Telnet 弱密码模块这里以flask模板注入漏洞为例pocs…

阿里云短信验证

1.了解阿里云用户权限操作 需要通过个人账户获得 授权码(id、密码),再通过这些信息获得服务 阿里云网址 :https://www.aliyun.com/ 1.登陆阿里云服务器2.进入个人账号然后点击 AccessKey 管理3.创建用户组4.添加用户组权限&…

SYSU程设c++(第三周) 对象类、类的成员、类与结构体的区别、类的静态成员

对象&类 类用于指定对象的形式,它包含数据的表示方法和用于处理数据的方法。 • 类中的数据和方法称为类的成员。 • 函数在一个类中也被称为类的成员。 定义一个类,其效果是定义一个数据类型的蓝图。它定义了类的对象包括了什么,以及可…

C++基础了解-08-C++运算符

C运算符 一、C 运算符 运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 二、算术运算符 下表显示了 C 支持的算术运算符…

led灯性价比最高的是哪款?2023最新的哪种led灯质量比较好

Led作为一种固态半导体,具有自发光、高可控性的特点,高效节能,省电环保,并且根据材料的不同,发出的光线颜色也不同,因此广泛用于各种照明灯具,台灯也不例外。 作为一种适合工作学习或者工作休闲…

跑步耳机入耳好还是不入耳好、十大跑步运动耳机品牌排行榜推荐

健身房经常会播放一些节奏较快的歌曲,这样能够激发大家在运动过程中的动力,所以运动时聆听音乐确实比较有效果,居家运动、室外跑步时选择运动耳机就变成了刚需,首先不能影响其他人、佩戴时要稳定,音质和续航要有保证&a…

npm install 原理

npm基本使用node.jsNode.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境。在任何地方安装了node,那么就可以运行JavaScript。所以在服务器上就可以运行js了。js就全栈了。node安装的同时就安装了npm。直接去官网下载,双击安装即可。安装完毕之后…

java基于springboot仓库管理系统的设计与实现

项目介绍 基于 SpringBoot 的仓库管理系统拥有多种角色,可供用户自定义使用。 功能模块 一、业务模块 1、客户管理 2、供应商管理 3、商品管理 4、商品进货管理 5、商品退货管理 6、商品销售管理 7、商品销售退货管理 二、系统模块 菜单管理,角色管…

Java高级工程师特别熟悉的js基础 | 面向对象编程/原型链/继承

面向对象编程/原型链/继承 面向对象编程 什么是面向对象编程? 面向对象是⼀种编程思想,经常被拿来和⾯面向过程⽐比较。其实说的简单点,面向过程关注的重点是动词,是分析出解决问题需要的步骤,然后编写函数实现每个步…

WIFI标签操作步骤

1. 打开并设置手机WIFI热点,设置SSID为ESL,密码为123456789(如下图) ​ 2. 运行APP,设置要接入的WIFI名称密码等信息(如下图) ​ 3. 长按背面按键(长按2-3秒)&#xff0c…

TypeScript 深度剖析:TypeScript 的理解?与 JavaScript 的区别?

一、是什么 TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等 超集,不得不说另外一个概念,子集,怎么理解这两个呢,举个例子,如…

MYSQL 最大连接数

MYSQL 最大连接数? 最大连接数也就是mysql服务最大支持多少客户端连接服务 查看服务支持最大连接数: show variables like %max_connections%;如下: 如何查看 MYSQL 服务被多少个客户端连接了? show processlist;如下: 其中 …

数位dp--Windy数

题目 思路 大体思路其实也跟第一篇博客类似,用前缀和的思想处理区间的方案数,然后求方案数则是通过把每一位数都拆分来,然后根据两种选择0-an-1和选an两种情况进行判断,但是因为前导零会对结果产生不一样的结果(比如0…

企业的ICP域名注册,你知道吗?

ICP域名备案查询的api接口,是企业在短时间内获得中沃公司最新数据的API接口。还可以帮助用户快速了解公司信息。基于域名的注册信息实时查询,适合对注册信息变更及时性要求较高的用户。通过ICP信息可以确认企业在互联网中的更多活动轨迹。企业的ICP域名注…

漏洞分析丨cve20110104

作者丨黑蛋目标程序调试工具16进制编辑器XP SP3office 2003ollydbg010Editor三、漏洞验证首先我们配置环境,并下载poc:使用ollydbg附加office excel 2003:打开poc可以看到发生了访问违规异常,像地址0x51453844中写入时发生异常&am…

【专项训练】分治、回溯

分治、回溯其实就是递归,只是是递归的一个细分,是一种特殊的递归 碰到一个题目,你就找他的重复性 最近重复性:根据重复性怎么构造以及如何分解,包括:分治、回溯 最优重复性:动态规划 本质:找重复性、分解问题、组合子问题的结果 回溯:试错! 50. Pow(x, n) https:…

sivalco使用测试pin正向导通

在学完功率半导体器件后,为了能够更好的了解功率半导体器件内部的相关性质,于是利用sivalco软件进行仿真,对于器件工作时相关数据进行分析,对于相关语句进行学习。 在功率半导体中以N或者P半导体进行掺杂获得我们所需要的器件&…

linux重置root用户密码

重置root密码 法一:rd.break 第 1 步:重启系统编辑内核参数 第 2 步:找到 linux 这行,在此行末尾空格后输入rd.break (End键也可直接进入行尾) 成功后显示页面为: 第 3 步:查看。…

华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)

文章目录一、MQ的作用二、cinder架构图三、各组件的作用四、cinder对接glusterfs一、MQ的作用 服务内各组件交互通过MQ进行 二、cinder架构图 IET,Linux用软件做存储,CNA识别过去就是IETTGT,物理存储,CNA识别过去就是TGT 三、…