특수 sysroot를 사용하여 gcc 툴체인을 올바르게 컴파일하는 방법은 무엇입니까?

특수 sysroot를 사용하여 gcc 툴체인을 올바르게 컴파일하는 방법은 무엇입니까?

및 를 gcc포함하여 새로운 것을 컴파일해 보았습니다 . 루트가 될 수 없으므로 다음 변수를 모두 설치하고 싶었습니다.binutilsglibc~/local

PREFIX=~/local && export PREFIX
PATH=~/local/bin:$PATH && export PATH

다음 구성을 사용하여 binutis, gcc및 (정확히 이 순서대로) 빌드했습니다 .glibc

../binutils-2.22/configure --prefix=$PREFIX --with-sysroot
../gcc-4.7.3/configure --prefix=$PREFIX
CC='gcc --sysroot=~/local' ../glibc-2.15/configure  --prefix=$PREFIX

내 생각은 먼저 컴파일 binutils한 다음 gcc연결된 새 binutils로 컴파일하고 마지막으로 두 가지를 모두 컴파일하는 것 glibc입니다(내 시스템에는 필요하지 않음 glibc) /usr/lib.

그러나 올바르게 컴파일하고 설치한 후 binutils다음 을 gcc구성할 gcc때 간단한 프로그램이 컴파일되지 않습니다 glibc.

int main() { return 0; }

출력(축약):

> gcc --sysroot=~/local/ test.cpp -o test
ld: cannot find crt1.o: No such file or directory
ld: cannot find crti.o: No such file or directory
ld: cannot find -lc
ld: cannot find crtn.o: No such file or directory

그러나 다음은 파일을 표시하지 않습니다.

find ~/local -name crti.o

내 구성에 문제가 있나요?

내 시스템은 Ubuntu 12.04 64비트("정확히")를 실행하는 서버이지만 이것이 시스템과 관련이 없다고 생각합니다. openSuSE 12.2에는 이러한 조합이 있으므로 세 가지 도구 모음 구성 요소의 버전은 서로 일치해야 합니다.

답변1

libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes테스트 프로그램을 빌드하고 실행하려고 시도하여 질식되는 구성을 방지하려면 glibc에 구성 명령을 추가해야 합니다 . 문제는 crt1.o, crti.o및 파일이 libc.{a,so}모두 crtn.o아직 설치하지 않은 glibc 라이브러리의 일부라는 것입니다.

Linux에서 처음부터 배우기:glibc에 관한 기사

관련 정보