musl: /usr/bin/ld를 사용하여 MariaDB를 빌드할 때 -lgcc_s를 찾을 수 없습니다.
x86_64 데비안 커널 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에서 실행할 수 있기 때문에 제가 뭔가 잘못하고 있는 것 같습니다.
그렇다면 알파인이 어떻게 그것을 짓고 있는지 보는 것은 어떨까요?
테스트를 비활성화하는 것 같습니다.-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을 대상으로 하는 것이었습니다.머슬 크로스 메이크를 받은 이후로 저는 모든 의존성을 처음부터 구축하고 있습니다(재미없어요 :).지금까지 거의 성공적인 구성을 얻었으며 컴파일(마지막 몇 가지 종속성을 강조) 작업을 수행하고 있습니다.
나는 다음 스크립트를 사용하여 물건을 만들고 있습니다.
#!/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"
저는 이것이 미래에 다른 누군가에게 도움이 되기를 바랍니다.
언급URL : https://stackoverflow.com/questions/64217764/building-mariadb-with-musl-usr-bin-ld-cannot-find-lgcc-s
'programing' 카테고리의 다른 글
Oracle: 함수 기반 인덱스 선택적 고유성 (0) | 2023.07.31 |
---|---|
보기에서 열을 삭제하는 방법 (0) | 2023.07.31 |
Swift에서 REST API 호출 (0) | 2023.07.31 |
Oracle: max(id)+1과 sequence.nextval의 차이 (0) | 2023.07.31 |
Xcode Playground가 Sources 폴더의 swift 파일에 액세스할 수 없음 (0) | 2023.07.31 |