Alpine Linux에서 gcc를 컴파일할 때 "구성: 오류: C 컴파일 프로그램을 실행할 수 없습니다" 발생

Alpine Linux에서 gcc를 컴파일할 때 "구성: 오류: C 컴파일 프로그램을 실행할 수 없습니다" 발생

Alpine Linux에서 gcc-7.3을 빌드하려고 합니다. 실행하면 make이런 오류가 뜹니다.

checking whether the C compiler works... configure: error: in `/build/x86_64-pc-linux-gnu/libgomp':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details.
make[2]: *** [Makefile:20670: configure-stage1-target-libgomp] Error 1
make[2]: Leaving directory '/build'
make[1]: *** [Makefile:22759: stage1-bubble] Error 2
make[1]: Leaving directory '/build'
make: *** [Makefile:23096: bootstrap] Error 2

나는 gcc를 다음과 같이 구성했습니다.

/gcc-7.3.0/configure --with-pkgversion="version" --with-bugurl="example.com" --disable-multilib --enable-languages=c --disable-werror

설치된 g++ 세부사항은 다음과 같습니다.

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/lto-wrapper
Target: x86_64-alpine-linux-musl
Configured with: /home/buildozer/aports/main/gcc/src/gcc-6.4.0/configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --build=x86_64-alpine-linux-musl --host=x86_64-alpine-linux-musl --target=x86_64-alpine-linux-musl --with-pkgversion='Alpine 6.4.0' --enable-checking=release --disable-fixed-point --disable-libstdcxx-pch --disable-multilib --disable-nls --disable-werror --disable-symvers --enable-__cxa_atexit --enable-default-pie --enable-cloog-backend --enable-languages=c,c++,objc,java,fortran,ada --disable-libssp --disable-libmpx --disable-libmudflap --disable-libsanitizer --enable-shared --enable-threads --enable-tls --with-system-zlib --with-linker-hash-style=gnu
Thread model: posix
gcc version 6.4.0 (Alpine 6.4.0)

다음 패키지를 설치했습니다.

g++ musl musl-dev bash gawk gzip make tar gmp mpfr3 mpfr-dev mpc1 mpc1-dev isl isl-dev

사용된 make 명령은 다음과 같습니다.

make -j$(nproc --all) BOOT_CFLAGS='-O3' bootstrap

config.log에서 이것을 찾았습니다.

configure:4876: g++ -V >&5
g++: error: unrecognized command line option '-V'
g++: fatal error: no input files
compilation terminated.
configure:4887: $? = 1
configure:4876: g++ -qversion >&5
g++: error: unrecognized command line option '-qversion'; did you mean '--version'?
g++: fatal error: no input files
compilation terminated.

답변1

--target올바른 등의 작업 버전

export GCC_VERSION=7.3.0
apk add --no-cache make build-base mpfr-dev mpc1-dev isl-dev
wget https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
tar -xzf gcc-${GCC_VERSION}.tar.gz
cd gcc-${GCC_VERSION}
./configure \
    --prefix=/usr/local \
    --build=$(uname -m)-alpine-linux-musl \
    --host=$(uname -m)-alpine-linux-musl \
    --target=$(uname -m)-alpine-linux-musl \
    --enable-checking=release \
    --disable-fixed-point \
    --disable-libmpx \
    --disable-libmudflap \
    --disable-libsanitizer \
    --disable-libssp \
    --disable-libstdcxx-pch \
    --disable-multilib \
    --disable-nls \
    --disable-symvers \
    --disable-werror
make -j $(nproc)
make install

C 컴파일러를 테스트합니다.

echo '#include <stdio.h>
int main() {
    printf("Hello, C world!\n");
    return 0;
}' | gcc -x c - && ./a.out

C++ 컴파일러를 테스트합니다.

echo '#include <iostream>
int main () {
  std::cout << "Hello, C++ world!\n";
  return 0;
}' | g++ -x c++ - && ./a.out

답변2

Alpine Linux에서 컴파일 하려면 gcc다음 단계가 필요합니다.

apk add --no-cache make build-base mpfr-dev mpc1-dev isl-dev
wget https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
tar -xzvf gcc-7.3.0.tar.gz
mkdir objdir
cd objdir
./../gcc-7.3.0/configure --prefix=$HOME/GCC-7.3.0 --with-pkgversion="version" --with-bugurl="example.com" --disable-multilib --enable-languages=c --disable-werror
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

우리는 libgcc컴파일러가 컴파일 타임에 사용할 수 있을 것으로 예상하는 저수준 지원 라이브러리를 구축합니다. 링크는 libgcc정수, 부동 소수점, 소수, 스택 해제(예외 처리에 유용함) 및 기타 지원 기능을 제공합니다. make && make install너무 많은 구성 요소를 빌드할 수 있고 모든 구성 요소가 gcc완료되지 않은 운영 체제를 대상으로 준비되지 않을 수 있으므로 단순히 실행하는 것이 아닙니다 .

관련 정보