【问题标题】:Building MariaDB with musl: /usr/bin/ld cannot find -lgcc_s用 musl 构建 MariaDB:/usr/bin/ld 找不到 -lgcc_s
【发布时间】:2020-10-06 00:25:04
【问题描述】:

我正在尝试在 x86_64 Debian 内核 v4.19 上使用 musl 工具链 build 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 可以运行它。

【问题讨论】:

    标签: gcc makefile cmake mariadb musl


    【解决方案1】:

    【讨论】:

    • 嗨@Mizux 谢谢你的回答。虽然它并没有 100% 帮助我,但它确实有助于解决我遇到的一些附带问题。实际上,我最终构建了musl-cross-make,它解决了我上面遇到的问题……尽管我最终遇到了另一个问题。
    【解决方案2】:

    当我完全成功时,我会更新这个答案,但迄今为止的解决方案是使用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"
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2011-07-16
      • 2012-05-17
      • 2020-04-14
      • 2012-03-26
      • 2018-12-13
      • 2015-09-22
      相关资源
      最近更新 更多