Debian(64비트)에서 소스에서 빌드된 glibc를 설치하는 방법은 무엇입니까?

Debian(64비트)에서 소스에서 빌드된 glibc를 설치하는 방법은 무엇입니까?

이 작업을 시도했을 때 시스템이 충돌하고 모든 프로그램이 즉시 세그먼트 오류를 ​​일으켰습니다. 나는 이것이 ld-linux-x86-64.so.2in 의 새 버전을 설치하기 때문이라고 생각하는데 , 프로그램을 로드할 때 새 버전 대신 in /lib64의 이전 버전을 찾습니다 . (분명히 ld와 libc는 일치해야 합니까?)libc.so.6/lib/x86_64-linux-gnu/lib64

/lib64위에 올려놓고 /etc/ld.so.conf.d/x86_64-linux-gnu.conf달려 보았습니다 ldconfig. 그러나 어떤 이유로든 이것은 아무것도 해결하지 못했습니다.

답변1

관련 없는 것을 검색하는 동안 내 설치가 이전 libc를 선택하는 이유를 우연히 발견했습니다. 새 libc에 이전 ABI 버전이 있었기 때문입니다(https://stackoverflow.com/questions/20577638/library-path-order-for-alternate-glibc-dynamic-linker-ld-so).

이것이 내가 한 일입니다:

  1. /lib/lib32, , 의 내용을 백업했습니다 /lib64.

  2. 검색 경로 상단에 /etc/ld.so.conf.d/x86_64-linux-gnu.conf배치되도록 편집했습니다 ./lib64

  3. --prefix=/usr --enable-kernel=2.6.26이전 glibc 버전(2.13)과 일치하는 옵션을 사용하여 glibc의 새 버전(2.19)을 구성했습니다 .

  4. 새로운 glibc를 만들었습니다. 문제는 별 일 없었습니다.

  5. su루트 액세스 권한 을 얻은 후 make install.ld-linux-x86-64.so.2libc.so.6

  6. 이 문제를 해결하기 위해 실행했습니다 ldconfig(물론 여전히 루트로).

  7. 설치를 다시 시작했습니다( make install). 일부 명령을 호출하면 다시 오류가 발생합니다 gcc. 나는 이것이 헤더 불일치 때문이라는 것을 알았습니다. 새 버전은 새 버전 대신 /usr/include/stdio.h이전 버전을 모든 곳에서 사용하고 있었습니다 ./usr/include/x86_64-linux-gnu/sys/cdefs.h/usr/include/sys/cdefs.h

  8. 그래서 문제 를 해결 하기 위해 디렉토리를 삭제 /usr/include/x86_64-linux-gnu/sys하고 헤더 도 교체 했으며 /usr/include/sys.a.out.hfpu_control.hieee754.h/usr/include/x86_64-linux-gnu/usr/include

  9. 설치를 다시 시작했습니다( make install). 마침내 성공했습니다.

시스템을 다시 시작한 후 모든 것이 완벽하게 작동했습니다.

내 시스템에 64비트 버전과 함께 설치된 32비트 버전의 libc를 업데이트하려고 하면 어떤 일이 발생하는지 파악하지 못했습니다. 나는 그것이 다시 모든 것을 끔찍하게 망칠 것이라고 의심합니다. 성공하면 이 답변을 업데이트하겠습니다.

관련 정보