및 를 gcc
포함하여 새로운 것을 컴파일해 보았습니다 . 루트가 될 수 없으므로 다음 변수를 모두 설치하고 싶었습니다.binutils
glibc
~/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에 관한 기사