Debian(64비트)에서 소스에서 빌드한 glibc를 어떻게 설치하나요?

Debian(64비트)에서 소스에서 빌드한 glibc를 어떻게 설치하나요?

이 작업을 시도했을 때 모든 프로그램이 즉시 세그먼트 오류를 ​​일으키면서 시스템이 중단되었습니다. 나는 그것이 ld-linux-x86-64.so.2in 의 새 버전을 설치했기 때문이라고 생각 하지만 프로그램이 로드되면 에서 새 버전이 아닌 /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.2설치가 완료된 후 세그폴트가 발생했고 여전히 이전 libc.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.h, fpu_control.hieee754.hin을 /usr/include/x86_64-linux-gnu의 새 버전에 대한 심볼릭 링크로 대체했습니다 /usr/include.

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

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

시스템에 64비트 버전과 함께 설치된 32비트 버전의 libc도 업데이트하려고 하면 어떤 일이 발생하는지 아직 확인하지 못했습니다. 나는 그것이 다시 모든 것을 끔찍하게 깨뜨릴 것이라고 생각합니다. 성공하면 이 답변을 업데이트하겠습니다.

관련 정보