如何解决使用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可以运行它。
解决方法
那为什么不看高山正在建造它呢?
似乎他们禁用了测试
-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 举报,一经查实,本站将立刻删除。