gcc의 이전 버전을 빌드하는 방법은 무엇입니까?

gcc의 이전 버전을 빌드하는 방법은 무엇입니까?

저는 Ubuntu 14.04.2 32비트 플랫폼을 사용하고 있으며 gcc 4.8.4가 설치되어 있습니다. 이전 버전의 Linux 커널을 컴파일하기 위해 이전 버전의 gcc(2.95.3)를 빌드하고 싶습니다. 나는 이것을 따라하려고 노력한다.gcc-2.95.3gcc-2.95.3-64(64비트 호스트에서 32비트 gcc를 빌드하는 방법에 대한 후자의 가이드가 도움이 되는 것 같았지만 작동하지 않았습니다.) 가이드를 빌드했지만 실패했습니다. 현재 배포판에서 컴파일할 수 있는 방법이 있나요?

편집: 이것은 내가 사용하지 않는 경우에 사용하는 오류 메시지입니다 ./configure --prefix=/usr/local/gcc --sysconfdir=/etc .make bootstrap부트로더플래그 다음 오류가 발생하기 전에 더 많은 오류가 발생했습니다. 다음 오류 메시지는 다음에서 발생합니다.gcc-2.95.1

Making info file `cpp.info' from `./cpp.texi'.
./cpp.texi:2041: Unknown command `sam'.
./cpp.texi:2041: Misplaced {.
./cpp.texi:2041: Misplaced }.
./cpp.texi:2041: Unmatched }.
./cpp.texi:361: Node `Include Operation''s Next field not pointed back to.
./cpp.texi:421: This node (`Once-Only') is the one with the bad `Prev'.
./cpp.texi:815: Next reference to nonexistent node `Nonstandard Predefined'.
./cpp.texi:802: `Standar Predefiined' has an Up field of `Predefined', but `Predefined' has no menu item for `Standar Predefiined'.
./cpp.texi:998: Prev reference to nonexistent node `Standard Predefined'.
./cpp.texi:802: `Nonstanard Preddefined' has an Up field of `Predefined', but `Predefined' has no menu item for `Nonstanard Preddefined'.
./cpp.texi:1366: Next reference to nonexistent node `Macro Parentheses'.
./cpp.texi:1398: Node `Macro Prenthesees''s Next field not pointed back to.
./cpp.texi:1475: This node (`SwallowSemicoloon') is the one with the bad `Prev'.
./cpp.texi:1398: Node `Macro Prenthesees's Prev field not pointed back to.
./cpp.texi:1366: This node (`Misnesting') has the bad Next.
./cpp.texi:1342: `Macro Prenthesees' has an Up field of `Macro Pitfalls', but `Macro Pitfalls' has no menu item for `Macro Prenthesees'.
./cpp.texi:1475: Node `SwallowSemicoloon''s Next field not pointed back to.
./cpp.texi:1538: This node (`Side Effects') is the one with the bad `Prev'.
./cpp.texi:1342: `SwallowSemicoloon' has an Up field of `Macro Pitfalls', but `Macro Pitfalls' has no menu item for `SwallowSemicoloon'.
./cpp.texi:1342: `Argumen Prescann' has an Up field of `Macro Pitfalls', but `Macro Pitfalls' has no menu item for `Argumen Prescann'.
./cpp.texi:1812: Next reference to nonexistent node `Newline in Argss'.
./cpp.texi:1850: Node `Newlines in Args's Prev field not pointed back to.
./cpp.texi:1812: This node (`Cascaded Macros') has the bad Next.
./cpp.texi:1911: Node `Conditinal Usess' missing Up field.
./cpp.texi:1944: Next reference to nonexistent node `Deleted ode'.
./cpp.texi:1944: Prev reference to nonexistent node `Conditioal Usess'.
./cpp.texi:1959: Next reference to nonexistent node `#else Diective.'.
./cpp.texi:2018: Node `#else Directive' missing Up field.
./cpp.texi:2039: Node `#elif Directive' missing Up field.
./cpp.texi:2086: Node `Deleted Code' missing Up field.
./cpp.texi:2107: Node `Conditionals-Macros' missing Up field.
./cpp.texi:2208: Next reference to nonexistent node `#error Directive'.
./cpp.texi:2208: Prev reference to nonexistent node `Conditioals-Maccros'.
./cpp.texi:2338: Node `#error irectivee' missing Up field.
./cpp.texi:71: `Other Drectivess' has an Up field of `Top', but `Top' has no menu item for `Other Drectivess'.
./cpp.texi:2435: Cross reference to nonexistent node `Standard Predefined'.
./cpp.texi:2360: Cross reference to nonexistent node `Nonstandard Predefined'.
./cpp.texi:1956: Menu reference to nonexistent node `#elif Diective.'.
./cpp.texi:1955: Menu reference to nonexistent node `#else Diective.'.
./cpp.texi:1908: Menu reference to nonexistent node `#error Directive'.
./cpp.texi:1906: Menu reference to nonexistent node `Conditioals-Maccros'.
./cpp.texi:1905: Menu reference to nonexistent node `Deleted ode'.
./cpp.texi:1903: Menu reference to nonexistent node `Conditioal Usess'.
./cpp.texi:1360: Menu reference to nonexistent node `Argument Prescan'.
./cpp.texi:1355: Menu reference to nonexistent node `Swallow Semicolon'.
./cpp.texi:1353: Menu reference to nonexistent node `Macro Parentheses'.
./cpp.texi:1148: Cross reference to nonexistent node `Swallow Semicolon'.
./cpp.texi:812: Menu reference to nonexistent node `Nonstandard Predefined'.
./cpp.texi:811: Menu reference to nonexistent node `Standard Predefined'.
./cpp.texi:128: Menu reference to nonexistent node `Other Directives'.
./cpp.texi:815: warning: unreferenced node `Standar Predefiined'.
./cpp.texi:998: warning: unreferenced node `Nonstanard Preddefined'.
./cpp.texi:1398: warning: unreferenced node `Macro Prenthesees'.
./cpp.texi:1911: warning: unreferenced node `Conditinal Usess'.
./cpp.texi:2018: warning: unreferenced node `#else Directive'.
./cpp.texi:2039: warning: unreferenced node `#elif Directive'.
./cpp.texi:2086: warning: unreferenced node `Deleted Code'.
./cpp.texi:2338: warning: unreferenced node `#error irectivee'.
makeinfo: Removing output file `cpp.info' due to errors; use --force to preserve.
make[2]: *** [cpp.info] Error 2

답변1

현대 시스템에서 그러한 오래된 버전의 gcc를 구축하는 데 어려움을 겪을 것입니다... 복사한 오류는 에서 발생하며 texinfo더 이상 gcc 2.95에 포함된 문서와 호환되지 않습니다.

바이너리를 직접 설치해 볼 수 있습니다http://snapshot.debian.org/package/gcc-2.95/2.95.4.ds15-27/;기존 gcc 설치를 건드리지 않고 거기에서 C 지원을 설치 cpp-2.95하고 gcc-2.95제공합니다. C++ 지원을 받으려면 g++-2.95및 라이브러리가 필요합니다. 최신 시스템에 얼마나 잘 설치되는지 확인하지 않았습니다.

답변2

방금 다음 단계를 사용하여 Ubuntu 14.04에 gcc-3.4.6 및 gcc-2.95.3을 설치했습니다.지도 시간. 해당 페이지에서 일부 패치 파일도 다운로드해야 하기 때문에 이 단계를 여기에 게시하는 것은 별로 의미가 없습니다.

두 컴파일 모두 gcc 빌드 디렉터리와 다른 Makefile이 포함된 하위 폴더의 모든 Makefile을 -D_FORTIFY_SOURCE=0추가 해야 했습니다 .CFLAGS

먼저 gcc-3.4.6을 설치한 다음 이를 사용하여 gcc-2.95.3을 빌드해야 합니다. 이렇게 하려면 CC=/opt/x86_64/gcc/gcc-3.4.6/bin/gccgcc-2.95.3의 Makefile에 설정해야 합니다.

또한 소스 디렉터리에서 튜토리얼 페이지의 명령으로 생성된 디렉터리 glibc-2.10.1로 다음 파일을 복사해야 했습니다 .gcc-2.95.3/glibc-workaround/

  • bits/libc-lock.h
  • sys/param.h
  • _G_config.h

위 문제의 오류 메시지를 수정하려면:나는 내가 컴파일하거나 설치한 gcc-2.95.3 Makefile의 모든 부분을 주석 처리했습니다 texinfo.cpp.info

답변3

소스에서 이전 버전의 gcc를 컴파일하고 prefix 옵션을 사용하여 다른 대상 디렉터리를 지정해야 합니다.

./configure --prefix=/usr/local/gcc

내 생각에 gcc 구성을 사용하면 기존 /etc를 사용할 수 있을 것 같습니다.

./configure --prefix=/usr/local/gcc --sysconfdir=/etc

관련 정보