首页 > 其他分享 >通过qemu和docker搭建检查编译环境

通过qemu和docker搭建检查编译环境

时间:2023-07-27 09:22:49浏览次数:42  
标签:kB Get com jammy 编译 ubuntu docker qemu ports

背景

在工作中我们经常需要交叉编译一些可执行程序或者动态库,有时要编译的程序过于复杂,如果靠纯的交叉编译,费事又费力,需要解决大量的编译依赖以及报错。

解决方案 docker + qemu-user

qemu-user提供可以运行不同架构的用户态程序的方案,而docker可以帮我们搭建一个运行qemu-user的环境。

步骤

下面以在x86_64上编译一个给ARM64用的可执行程序的例子。

安装qemu-user

sudo apt install qemu-user-static

下载目标架构的docker镜像

以ubuntu为例,从这个链接中可以找到支持的不同架构的ubuntu镜像,或者从这里可以看到更多的信息。
image

  • 安装
sudo docker pull arm64v8/ubuntu

运行容器

$ docker run -it -d -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/ubuntu:latest
$ docker ps
CONTAINER ID   IMAGE                   COMMAND       CREATED         STATUS         PORTS     NAMES
206e91129cb4   arm64v8/ubuntu:latest   "/bin/bash"   2 seconds ago   Up 2 seconds             eager_northcutt

进入容器

docker exec -it 206e91129cb4 /bin/bash

安装必要的软件包

更新软件

root@206e91129cb4:/# apt update
Get:1 http://ports.ubuntu.com/ubuntu-ports jammy InRelease [270 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [119 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease [108 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [110 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports jammy/multiverse arm64 Packages [224 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports jammy/universe arm64 Packages [17.2 MB]
Get:7 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 Packages [1758 kB]
Get:8 http://ports.ubuntu.com/ubuntu-ports jammy/restricted arm64 Packages [24.2 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports jammy-updates/universe arm64 Packages [1096 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports jammy-updates/restricted arm64 Packages [514 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports jammy-updates/multiverse arm64 Packages [27.8 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports jammy-updates/main arm64 Packages [973 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports jammy-backports/universe arm64 Packages [23.6 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports jammy-backports/main arm64 Packages [49.0 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports jammy-security/main arm64 Packages [695 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports jammy-security/multiverse arm64 Packages [23.4 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports jammy-security/universe arm64 Packages [846 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports jammy-security/restricted arm64 Packages [513 kB]
Fetched 24.6 MB in 18s (1375 kB/s)
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.

安装编译器

root@206e91129cb4:/# apt install build-essential

编译的软件包

root@206e91129cb4:~# cd stressapptest-1.0.9
root@206e91129cb4:~/stressapptest-1.0.9# LDFLAGS=--static ./configure
root@206e91129cb4:~/stressapptest-1.0.9# make

完。

标签:kB,Get,com,jammy,编译,ubuntu,docker,qemu,ports
From: https://www.cnblogs.com/pengdonglin137/p/17583209.html

相关文章

  • 编译RHEL 8.7 kernel 并重新安装
    背景:最近遇到一个bug,需要修改RHEL8.7kernelconfig的配置参数,然后重新安装该kernel。踩过一些坑,复盘整理。查询当前的kerneluname-r4.18.0-477.15.1.el8_8.x86_64这是当前运行的内核版本。版本号的不同部分表示以下信息:•4.18.0:内核的主版本号、次版本号和发布版本号......
  • grafana 监控docker
    使用Grafana监控Docker在容器化应用的开发和部署中,Docker已经变得非常流行。作为一个容器编排和管理工具,Docker可以极大地简化应用程序的部署和管理过程。然而,随着容器数量的增加,监控容器和了解它们的性能变得越来越重要。Grafana是一个强大的监控工具,可以可视化和分析各种......
  • QEMU 加载 uboot kernel 实例
    根文件系统放在SD卡qemu-system-arm-Mmcimx6ul-evk\-m512M\-kernel./zImage\-dtb./imx6ul-14x14-evk.dtb\-nographic\-devicesd-card,drive=mysdcard\-......
  • Dokcer学习之旅(2)——Dockerfile基础应用
    什么是Dockerfile?从dockercommit的学习中,我们可以了解到,镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就......
  • Dockerfile example
    FROMpytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtimeARGDEBIAN_FRONTEND=noninteractiveENVTZ=Asia/Shanghai#RUNrm/etc/apt/sources.list.d/cuda.listRUNapt-getupdate#安装ifconfig命令RUNapt-getinstall-ynet-tools#安装ping命令RUNapt-getinstall-yiputils......
  • docker安装jenkins记录
    docker安装jenkins记录docker拉取jenkins镜像dockerpulljenkinszh/jenkins-zh创建Jenkins挂载目录并授权权限mkdir-p/docker/jenkinschmod777/docker/jenkins创建并启动Jenkins容器dockerrun-d-p10240:8080-p10241:50000-v/docker/jenkins:/var/jenkins......
  • Docker学习路线12:开发者体验
    到目前为止,我们只讨论了使用Docker来部署应用程序。然而,Docker也是一个极好的用于开发应用程序的工具。可以采用一些不同的建议来改善开发体验。在应用程序中使用docker-compose以方便开发。使用绑定挂载将本地代码挂载到容器文件系统中,以避免每次更改都需要重新构建容器映像。......
  • Docker安装部署ElasticSearch
    参考文档:https://blog.csdn.net/qq_37726813/article/details/129917352https://blog.csdn.net/yangkei/article/details/126837326https://blog.csdn.net/yangkei/article/details/1268373261.部署单点ElasticSearch因为我们还需要部署kibana容器,因此需要让ElasticSearch和......
  • xxl-job docker 搭建&接入
    项目地址:https://github.com/xuxueli/xxl-job1初始化数据库新建表sql语句在项目里/xxl-job/doc/db/tables_xxl_job.sql在目标数据库执行语句建库、建表##XXL-JOBv2.4.1-SNAPSHOT#Copyright(c)2015-present,xuxueli.CREATEdatabaseifNOTEXISTS`xxl_job`......
  • docker如何利用iptables限制外网访问
    先看官网:点击跳转如果有问题,也别来问我,我也不懂,下面自己感悟一下,或者有iptables的大佬,欢迎指教还有什么问题,想咨询的,加群:582337768。这个群不是我的,但是我在里面,但是还是那句话,我也不懂。然后开始了,首先使用DOCKER-USER的chain来进行操作。DOCKER-USER该chain在ubuntu下面,......