我的 binary patch 随笔:常用软件自动化编译(二)

常见软件自动化编译(二)


概述

接上一篇,本文主要详细介绍在 docker container 中,自动化构建常用软件 FFmpeg,ImageMagick,libav,openssl,php,qemu 和 wireshark 的编译环境。

FFmpeg

FFmpeg 是一个可以运行音频和视讯多种格式的录影、转换、流功能的开源软件,其中包含了大量音频和视频处理的库函数。
编写自动化 shell 脚本,实现 FFmpeg 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器,注意不同软件要求参数不同)1

#!/bin/sh
set -e
docker run -itd --name ffmpeg ubuntu:latest /bin/bash
docker exec -it ffmpeg bash -c "apt-get update -qq && apt-get -y install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo wget yasm zlib1g-dev clang"
docker exec -it ffmpeg bash -c "git clone https://github.com/FFmpeg/FFmpeg.git"
docker exec -it ffmpeg bash -c "cd FFmpeg; ./configure [cc=clang] "
docker exec -it ffmpeg bash -c "cd FFmpeg; make [cc=clang] "
docker commit ffmpeg myffmpeg:Gcc[Clang]Build
docker stop ffmpeg
docker rm ffmpeg

使用新构造的编译环境的命令如下:

docker run -it --name ffmpeg myffmpeg:Gcc[Clang]Build /bin/bash

ImageMagick

ImageMagick 是一个用于查看,编辑位图文件以及进行图像格式转换的开源软件。
编写自动化 shell 脚本,实现 ImageMagick 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 CC=clang 修改默认编译器)2

#!/bin/sh
set -e
docker run -itd --name ImageMagick ubuntu:latest /bin/bash
docker exec -it ImageMagick bash -c "apt-get update && apt-get -y install gcc vim clang make git"
docker exec -it ImageMagick bash -c "git clone https://github.com/ImageMagick/ImageMagick.git"
docker exec -it ImageMagick bash -c "cd /ImageMagick; ./configure [CC=clang]"
docker exec -it ImageMagick---ImageMagick bash -c "cd /ImageMagick; make [CC=clang] -j30 V=1"
docker commit ImageMagick myimagemagick:Gcc[Clang]Build
docker stop ImageMagick---ImageMagick
docker rm ImageMagick---ImageMagick

使用新构造的编译环境的命令如下:

docker run -it --name ImageMagick myimagemagick:Gcc[Clang]Build /bin/bash

libav

libav 是一个提供多媒体输出处理库与功能的开源软件,是 FFmpeg 项目的一个分支。
编写自动化 shell 脚本,实现 libav 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器)3

#!/bin/sh
set -e
docker run -itd --name libav ubuntu:latest /bin/bash
docker exec -it libav bash -c "apt-get update && apt-get -y install yasm gcc vim clang make git"
docker exec -it libav bash -c "git clone https://github.com/libav/libav.git"
docker exec -it libav bash -c "cd /libav; ./configure [cc=clang]"
docker exec -it libav---libav bash -c "cd /libav; make [cc=clang] -j30"
docker commit libav mylibav:Gcc[Clang]Build
docker stop libav
docker rm libav

使用新构造的编译环境的命令如下:

docker run -it --name libav mylibav:Gcc[Clang]Build /bin/bash

php-src

php-src 是一个由 C 语言编写的 php 脚本解释器。
编写自动化 shell 脚本,实现 php-src 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(指定 cc=clang 修改默认编译器)4

#!/bin/sh
set -e
docker run -it --name php ubuntu:latest /bin/bash
docker exec -it php bash -c "apt-get update && apt-get -y install pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev gcc vim clang make git"
docker exec -it php bash -c "git clone https://github.com/php/php-src.git"
docker exec -it php bash -c "cd php-src; ./buildconf "
docker exec -it php bash -c "cd php-src; ./configure --enable-debug [cc=clang]"
docker exec -it php bash -c "cd php-src; make [cc=clang] -j30"
docker commit php myphp:Gcc[Clang]Build
docker stop php 
docker rm php

使用新构造的编译环境的命令如下:

docker run -it --name php myphp:Gcc[Clang]Build /bin/bash

qemu

qemu 是一款开源的硬件虚拟化软件,具有高速和跨平台的特性。
编写自动化 shell 脚本,实现 qemu 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(注:需要再 configure 阶段指定 --cc=clang,并在 make 阶段指定 cc=clang,以修改默认编译器)5

#!/bin/sh
set -e
docker run -itd --name qemu ubuntu:latest /bin/bash
docker exec -it qemu bash -c "apt-get update && apt-get -y install libglib2.0-dev libfdt-dev libpixman-1-dev zlib1g-dev ninja-build gcc vim clang make git"
docker exec -it qemu bash -c "git clone https://github.com/qemu/qemu.git"
docker exec -it qemu bash -c "cd /qemu; mkdir build;"
docker exec -it qemu bash -c "cd /qemu/build; ../configure --disable-werror [--cc=clang]"
docker exec -it qemu bash -c "cd /qemu/build; make [cc=clang] -j30"
docker commit qemu myqemu:Gcc[Clang]Build
docker stop qemu
docker rm qemu

使用新构造的编译环境的命令如下:

docker run -it --name qemu myqemu:Build /bin/bash

wireshark

wireshark 是一款开源的网络数据包分析软件,可实现数据包截取以及统计分析的功能。
编写自动化 shell 脚本,实现 wireshark 软件编译环境的自动化构建。
分别使用 gcc 和 clang 实现软件编译(注:需要在 cmake 阶段 指定不同编译器)6

#!/bin/sh
set -e
docker run -itd --name wireshark ubuntu:latest /bin/bash
docker exec -it wireshark bash -c "apt-get update && apt-get -y install build-essential libglib2.0-0 libglib2.0-dev libgcrypt20-dev libc-ares-dev bison flex gettext libssh-dev libpcap-dev systemd libsystemd-dev qtbase5-dev qttools5-dev qtmultimedia5-dev gcc vim clang make git cmake"
docker exec -it wireshark bash -c "git clone https://github.com/wireshark/wireshark.git"
docker exec -it wireshark bash -c "cd /wireshark; cmake -DCMAKE_C_COMPILER=gcc[clang] -DCMAKE_CXX_COMPILER=g++[clang++] ."
docker exec -it wireshark bash -c "cd /wireshark; make -j30"
docker commit wireshark mywireshark:Gcc[Clang]Build
docker stop wireshark
docker rm wireshark

使用新构造的编译环境的命令如下:

docker run -it --name wireshark mywireshark:Gcc[Clang]Build /bin/bash

  1. https://trac.ffmpeg.org/wiki/CompilationGuide ↩︎

  2. https://imagemagick.org/script/install-source.php ↩︎

  3. https://libav.org/documentation/platform.html ↩︎

  4. https://github.com/php/php-src ↩︎

  5. https://wiki.qemu.org/Hosts/Linux ↩︎

  6. https://www.wireshark.org/docs/wsug_html_chunked/ChBuildInstallUnixBuild.html ↩︎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值