微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Musl构建MariaDB:/ usr / bin / ld找不到-lgcc_s

如何解决使用Musl构建MariaDB:/ usr / bin / ld找不到-lgcc_s

我正在尝试使用x86_64 Debian内核v4.19上的build MariaDB工具链来musl 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将库包含在内或将库符号链接到{{1} }失败。

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

解决方法

那为什么不看高山正在建造它呢?

https://git.alpinelinux.org/aports/tree/main/mariadb/APKBUILD?id=3ca8e70b047f37a01df42e3244014a6635893abc

似乎他们禁用了测试 -DSKIP_TESTS=ON 参考:https://git.alpinelinux.org/aports/tree/main/mariadb/APKBUILD?id=3ca8e70b047f37a01df42e3244014a6635893abc#n186

还有他们的ppc-glibc补丁? https://git.alpinelinux.org/aports/tree/main/mariadb/ppc-remove-glibc-dep.patch?id=3ca8e70b047f37a01df42e3244014a6635893abc

,

当我完全成功时,我将更新此答案,但是到目前为止,解决方案是使用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,$MUSL_LIB"      \
    CFLAGS="-I$MUSL_INC"                    \
    CXXFLAGS="-I$MUSL_INC"                  \
    CPPFLAGS="-I$MUSL_INC"

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。