이 작업을 시도했을 때 시스템이 충돌하고 모든 프로그램이 즉시 세그먼트 오류를 일으켰습니다. 나는 이것이 ld-linux-x86-64.so.2
in 의 새 버전을 설치하기 때문이라고 생각하는데 , 프로그램을 로드할 때 새 버전 대신 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).
이것이 내가 한 일입니다:
/lib
/lib32
, , 의 내용을 백업했습니다/lib64
.검색 경로 상단에
/etc/ld.so.conf.d/x86_64-linux-gnu.conf
배치되도록 편집했습니다 ./lib64
--prefix=/usr --enable-kernel=2.6.26
이전 glibc 버전(2.13)과 일치하는 옵션을 사용하여 glibc의 새 버전(2.19)을 구성했습니다 .새로운 glibc를 만들었습니다. 문제는 별 일 없었습니다.
su
루트 액세스 권한 을 얻은 후make install
.ld-linux-x86-64.so.2
libc.so.6
이 문제를 해결하기 위해 실행했습니다
ldconfig
(물론 여전히 루트로).설치를 다시 시작했습니다(
make install
). 일부 명령을 호출하면 다시 오류가 발생합니다gcc
. 나는 이것이 헤더 불일치 때문이라는 것을 알았습니다. 새 버전은 새 버전 대신/usr/include/stdio.h
이전 버전을 모든 곳에서 사용하고 있었습니다 ./usr/include/x86_64-linux-gnu/sys/cdefs.h
/usr/include/sys/cdefs.h
그래서 문제 를 해결 하기 위해 디렉토리를 삭제
/usr/include/x86_64-linux-gnu/sys
하고 헤더 도 교체 했으며/usr/include/sys
.a.out.h
fpu_control.h
ieee754.h
/usr/include/x86_64-linux-gnu
/usr/include
설치를 다시 시작했습니다(
make install
). 마침내 성공했습니다.
시스템을 다시 시작한 후 모든 것이 완벽하게 작동했습니다.
내 시스템에 64비트 버전과 함께 설치된 32비트 버전의 libc를 업데이트하려고 하면 어떤 일이 발생하는지 파악하지 못했습니다. 나는 그것이 다시 모든 것을 끔찍하게 망칠 것이라고 의심합니다. 성공하면 이 답변을 업데이트하겠습니다.