问题

问题1,bison 时 xsltproc 失败

在 Ubuntu 22.04 上安装了 gcc 然后做一个构建,然后得到了一个错误:

1
parser.y: error: xsltproc failed with status 127

如下图

image-20230322212542327

这个项目中用到了 flex 和 bison,然后构建过程中 bison 的处理失败,报错如上。

我能够确定 parser.y 非常正确,因为在 macOS 上构建是一点错没有的,转而到服务器上去做的时候就不行了。

算是个百思不解的问题。

然后后来还是解决了:只要安装缺失的 xsltproc 就行了:

1
sudo apt-get install -y bison xsltproc

这算是个不大不小的挫折。原来,failed with status 127 说的就是找不到那个执行文件啊。

问题2:flex include directory NOTFOUND

同上,在一开始,先有的是 Flex 的错误,还在 CMake 寻找 Flex 的时候就失败了,说是:

1
-- - FLEX 2.6.4 FOUND: /usr/bin/flex, inc: FLEX_INCLUDE_DIR-NOTFOUND - BUILT FOR 

明明 flex package 已经安装了,明明 CMake 都找到了 flex 执行文件了,非要说 FLEX_INCLUDE_DIR-NOTFOUND。

我就真的设法钻到 runner 里面去 find 了一下,还真是没有 FlexLexer.h 头文件。

后来也找到了原因,因为 ubuntu 不知道从什么时候起,把这个头文件搬到 fl-dev 里面去了,同样地,fl.a 链接库也在那个包里面。所以需要这么做:

1
sudo apt install -y flex libfl-dev

确实是个低级错误。

问题3: doxygen 缺少组件 dot

这个问题其实很古老,也不困难。但是经常会写脚本时忘记安装 graphviz 包,dot 这个执行文件就在这个包里面。

所以:

1
sudo apt install -y doxygen graphviz

就是这样。

用作制作 gcc-12 builder 的 Docker 源文件

于是顺便更新一下 Dockerfile 中的有关序列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
FROM ubuntu:jammy
# 22.04

ARG DEBIAN_FRONTEND=noninteractive
ARG APT_MIRROR_SITE=archive.ubuntu.com
ARG PROXY

ENV MIRROR="${APT_MIRROR_SITE:-archive.ubuntu.com}" \
    HTTP_PROXY="${PROXY}" \
    HTTPS_PROXY="${PROXY}"

RUN sed -i "s@//.*archive.ubuntu.com@//$MIRROR@g" /etc/apt/sources.list \
    && apt-get update -y

RUN fetchDeps=" \
    ca-certificates locales \
    software-properties-common gpg-agent curl wget lsof \
    python3 python3-pip \
    git ccache clang-tidy build-essential \
    make cmake automake bison flex xsltproc libfl-dev \
    libtool pkg-config \
    doxygen graphviz \
    "; \
    TZ=Etc/UTC; LOCALE=en_US.UTF-8; \
    echo && echo && echo "install basics ..." \
    && apt-get install -y --no-install-recommends ${fetchDeps}

RUN echo && echo && echo "install gcc-12 ..." \
    && add-apt-repository --yes -u ppa:ubuntu-toolchain-r/test \
    && echo && echo && apt-get install -y gcc-12 gcc-12-locales g++-12-multilib \
    && [ -x /usr/bin/gcc-12 ] && update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 50 --slave /usr/bin/g++ g++ /usr/bin/g++-12 \
    && echo 1 | update-alternatives --config gcc

RUN echo && echo && echo "setup locale ..." \
    && locale-gen $LOCALE \
    && cat /etc/default/locale && echo "Original TimeZone is: $(locale -a)" && date +'%FT%T%z' \
    && ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ | tee /etc/timezone \
    && echo "Current TimeZone updated: $(locale -a)" && date +'%FT%T%z'

RUN echo && echo && echo "install conan ..." \
    && pip3 install conan

RUN echo && echo && echo "cleanup ..." \
    && echo "# SKIP #: apt-get purge -y --auto-remove ${fetchDeps}" \
    && rm -rf /var/lib/apt/lists/* \
    && cat <<-EOF
	    python3: $(python3 --version)
	    git: $(git --version)
	    doxygen: $(doxygen --version)
	    clang-tidy: $(clang-tidy --version)
	    gcc: $(gcc --version)
	    gcc-12: $(gcc-12 --version)
	    flex: $(flex --version)
	    bison: $(bison --version)
	    cmake: $(cmake --version)
	    conan: $(conan --version)
	    timstamp: $(date +'%FT%T%z')
	EOF

这个 Dockerfile 制作的构建环境,可以被直接用在 GitLab CI 中。

:end:

留下评论