1

我正在尝试在 x86_64 Debian 内核 v4.19 上使用 musl 工具链构建MariaDB v10.3 。我主要是使用包装器来实现这一点。我安装的相关包如下:musl-gcc gcc

  • musl(1.1.21-2):标准 C 库
  • musl-dev(1.1.21-2):标准C库开发文件
  • musl-tools(1.1.21-2):标准C库工具

为了构建 MariaDB,我首先运行:

CC=/usr/bin/musl-gcc cmake ../ -DWITHOUT_TOKUDB=1

它干净地退出,然后我跟进:

make CC=/usr/bin/musl-gcc

带有以下消息的错误:

Scanning dependencies of target strings-t
[ 12%] Building C object unittest/strings/CMakeFiles/strings-t.dir/strings-t.c.o
[ 12%] Linking CXX executable strings-t
/usr/bin/ld: cannot find -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
make[2]: *** [unittest/strings/CMakeFiles/strings-t.dir/build.make:94: unittest/strings/strings-t] Error 1
make[1]: *** [CMakeFiles/Makefile2:731: unittest/strings/CMakeFiles/strings-t.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

现在我知道 musl 正在寻找的库 ( libgcc_s.so) 位于其中,/lib/gcc/x86_64-linux-gnu/8/但我尝试使用LDFLAGS或符号链接该库来包含该库的尝试/usr/lib/x86_64-linux-musl/失败了。

我要以正确的方式编译 MariaDB 吗?我想我做错了什么,因为 Alpine Linux 可以运行它。

4

2 回答 2

0

当我完全成功时,我会更新这个答案,但到目前为止的解决方案是使用musl-cross-make来编译所有库等专门针对 musl。自从获得 musl-cross-make 以来,我一直在从头开始构建所有依赖项(这并不有趣 :))。到目前为止,我已经获得了或多或少的成功配置,并且我正在编译(敲掉最后几个依赖项)。

我正在使用以下脚本来构建东西:

#!/bin/bash

set -euo pipefail

# musl paths
MUSL_PREFIX='/usr/local/x86_64-linux-musl'
MUSL_INC="$MUSL_PREFIX/include"
MUSL_LIB="$MUSL_PREFIX/lib"
CC='/usr/local/bin/x86_64-linux-musl-gcc'
CXX='/usr/local/bin/x86_64-linux-musl-g++'

    #
    # CMake couldn't locate lz4 when I installed it manually, so we bundle
    # it in with the MariaDB build
    #
    wget https://github.com/lz4/lz4/archive/v1.7.5.tar.gz
    tar -xzf v1.7.5.tar.gz
    rm v1.7.5.tar.gz
    mv lz4-1.7.5 /home/ajg/mariadb/storage/mroonga/vendor/groonga/vendor/

    # Configure the build
    CC="$CC"                        \
    CXX="$CXX"                      \
    LDFLAGS="-L$MUSL_LIB -Wl,-rpath,$MUSL_LIB"      \
    CFLAGS="-I$MUSL_INC"                    \
    CXXFLAGS="-I$MUSL_INC"                  \
    CPPFLAGS="-I$MUSL_INC"                  \
    CMAKE_PREFIX_PATH="$MUSL_PREFIX"            \
    cmake . -DWITHOUT_TOKUDB=1 -DGRN_WITH_BUNDLED_LZ4=ON

    # Make it
    make                            \
    CC="$CC"                        \
    CXX="$CXX"                      \
    LDFLAGS="-L$MUSL_LIB -Wl,-rpath,$MUSL_LIB"      \
    CFLAGS="-I$MUSL_INC"                    \
    CXXFLAGS="-I$MUSL_INC"                  \
    CPPFLAGS="-I$MUSL_INC"

我希望这对将来的其他人有所帮助:)

于 2020-11-24T20:56:45.787 回答