GCC를 빌드할 때 C++ 라이브러리가 비활성화되지 않는 이유는 무엇입니까?

GCC를 빌드할 때 C++ 라이브러리가 비활성화되지 않는 이유는 무엇입니까?

나는 두 번째 최신 gcc와 최신 binutils를 얻었고 데비안 시스템에서 크로스 컴파일러를 만들려고 했습니다. 어떤 이유로 GCC가 컴파일에 실패합니다.

make[2]: Leaving directory `/home/dylan/Documents/cross/gcc-build/fixincludes'
Configuring in ./gmp
configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1
make[1]: Leaving directory `/home/dylan/Documents/cross/gcc-build'
make: *** [all] Error 2

다음 구성을 사용하십시오.

../gcc-4.9.0/configure                               \
    --target=$TARGET                                \
    --prefix=$PREFIX                                  \
    --with-sysroot=/mnt                              \
    --with-newlib                                    \
    --without-headers                                \
    --with-local-prefix=/tools                       \
    --with-native-system-header-dir=/tools/include   \
    --disable-nls                                    \
    --disable-shared                                 \
    --disable-multilib                               \
    --disable-decimal-float                          \
    --disable-threads                                \
    --disable-libatomic                              \
    --disable-libgomp                                \
    --disable-libitm                                 \
    --disable-libquadmath                            \
    --disable-libsanitizer                           \
    --disable-libssp                                 \
    --disable-libvtv                                 \
    --disable-libcilkrts                             \
    --disable-libstdc++-v3                           \
    --enable-languages=c,c++

Linux From Scratch에서 버전 확인을 실행하여 다음과 같은 결과를 얻었습니다.

bash, version 4.2.37(1)-release
/bin/sh -> /bin/bash
Binutils: (GNU Binutils for Debian) 2.22
bison (GNU Bison) 2.5
/usr/bin/yacc -> /usr/bin/bison.yacc
bzip2,  Version 1.0.6, 6-Sept-2010.
Coreutils:  8.13
diff (GNU diffutils) 3.2
find (GNU findutils) 4.4.2
GNU Awk 4.0.1
/usr/bin/awk -> /usr/bin/gawk
gcc (Debian 4.7.2-5) 4.7.2
GNU C Library (Debian EGLIBC 2.13-38+deb7u4) stable release version 2.13
grep (GNU grep) 2.12
gzip 1.5
Linux version 3.2.0-4-amd64 ([email protected]) (gcc version 4.6.3 (Debian 4.6.3-14) ) #1 SMP Debian 3.2.60-1+deb7u3
m4 (GNU M4) 1.4.16
GNU Make 3.81
patch 2.6.1
Perl version='5.14.2';
GNU sed version 4.2.1
tar (GNU tar) 1.26
Texinfo: makeinfo (GNU texinfo) 4.13
xz (XZ Utils) 5.1.0alpha
Compilation OK

구글에서 봤기 때문에 버그는 아닌 것 같지만, 제가 본 이 모든 수정 사항과 팁은 제 문제가 아닙니다. C++ 라이브러리는 비활성화되지 않는 것 같습니다.

답변1

나는 똑같은 문제를 겪고 있으며 혼란 스럽습니다. 단서는 오류 줄에 있습니다.

configure: error: invalid feature name: libstdc++-v3
make[1]: *** [configure-gmp] Error 1

분명히 configure-gmp(make의) 대상은 상위 프로젝트에서 전달된 함수 이름입니다.

비결은 명령줄에 다음과 같이 철자를 입력하는 것입니다.

--disable-libstdc__-v3

글쎄요. 맞습니다. 더하기 기호 대신 밑줄을 사용하세요!

알아채다:GCC 5.1의 출력을 기반으로 ./configure --help가능합니다.--disable-libstdcxx옵션도 동일한 효과를 갖습니다. 그러나 이것이 언제 도입되었는지는 확실하지 않으며, 확인해본 적도 없습니다.

자발적으로 읽으세요 ;)

이것은 내 이론에 근거한 것입니다.이 버그 보고서GCC 추적기에서.

내 것과 같은 명령줄은 GCC 소스 트리에 이미 링크된 GMP를 사용하고 있거나 스크립트가 contrib/download_prerequisitesGCC tarball(내가 사용한 방법)에서 다운로드되었음을 나타냅니다. 이는 심볼릭 링크를 수행합니다.

지금은 이런 상황이라고 가정해보자. 나열된대로이 문서 페이지에서GMP, MPFR 및 MPC는 GCC의 전제 조건입니다. 보다위키 페이지 섹션지원 라이브러리이 "내장" 방법에 대한 자세한 설명입니다.

gmp-4.3.2위 스크립트는 GNU FTP 서버에서 다운로드할 수 있도록 하드코드되어 있습니다(GCC 5.1 기준) .

이상하게 4.3.2가 언급되네요이전 버전 페이지버전 4.3.1 범위 내에서:

GMP 4.3.1 관련 문제(위의 4.3.2에 대한 정보도 참조):

그러나 실제로는 자체 목록을 얻지 못합니다(날짜/시간도 없음).

GCC 추적기의 버그 보고서에서 Ralf는 다음과 같이 언급했습니다.

이 오류는 현재 인수 없이 --enable/--disable/--with/--에서 영숫자, 빼기 기호, 점 또는 밑줄 이외의 문자를 허용하지 않는 인수를 구문 분석하는 Autoconf 코드에서 발생합니다. 나는 이것이 Autoconf에서 수정되어야 한다고 생각합니다.

그러나configure.ac에도 버그가 있습니다. 이를 수정한 후에는 다음을 사용할 수 있습니다.

--disable-libstdc__-v3

(즉, 더하기 기호를 밑줄로 변환합니다.) GCC가 고정된 Autoconf 버전으로 전환되면 플러스 스위치는 더 이상 필요하지 않습니다.

이제 패키지 관리자의 컴퓨터에서 사용할 수 있는 Autoconf 버전을 사용하여 패키지를 준비했으므로그리고우리는 상대적으로 오래된 버전의 GMP를 사용하고 있으며, configureGMP 타르볼 내에서 생성된 스크립트는 위 티켓에서 Ralf가 지적한 결함이 발생하기 쉽습니다.

따라서 종속성이 필요한 것보다 조금 더 빠르기 때문에 이 어리석은 실수를 수정해야 합니다.

관련 정보