다음은 내가 가지고있는 시나리오입니다.chroot는 동적 연결에 어떤 영향을 줍니까?
debootstrap 우분투 (64 비트) 환경을 만들었습니다. 나는 우분투 (64 비트) 명쾌한 시스템에 /env/mav/
에 그것을 배치했다. 나는 chroot
을 /env/mav
에 넣을 수 있으며 완벽한 시스템을 완벽하게 활용할 수 있습니다.
심지어 chrooted 환경 밖에서 명쾌한 프로그램을 사용할 수 있습니다. 즉 /env/mav/bin/ls
이 실행됩니다.
그러나, 나는 LD_LIBRARY_PATH
를 수정하면 될 것으로 나타났습니다 /env/mav/lib
[1] [2] 나는 즉시 충돌합니다 실행
모든 단일 프로그램 (맑은와 코디 모두). (예 : ls로 인해 segfault가 발생 함). kern.log 보여줍니다 : 그러나
segfault at 7fece284aa18 ip 00007fece284aa18 sp 00007fff32028158 error 15
, 모든 프로그램이 잘 실행되고 명확 I chroot
/env/mav
로합니다. 그리고 모든 도서관이 투옥 된 도서관에서 읽히지 않고 있습니까 (/env/mav
) /lib
? 이 문맥에서 과 수정하는 사람 LD_LIBRARY_PATH
의 차이점은 무엇입니까? 내가 경우
또한, :
mount -B /env /env/mav/env
다음 chroot /env
다음 설정 LD_LIBRARY_PATH
이 /env/mav/lib
로, 모든 여전히 잘 실행됩니다.
나는 내부적으로 어떤 일이 벌어지고 있는지를 놓치고 있습니다. 어떤 ld 내부가 어딘가에 저장되어 있습니까? chroot는 마술 같은 것을합니까?
[1] 유즈넷 환경의 프로그램을 독립 실행 형 감옥 외부의 독립 라이브러리에 동적으로 링크하는 사용 사례가 있습니다.
[2] 이것은 단지 간략한 예입니다. 실제로는 /usr/lib
등이 모두 포함됩니다. 각별한 환경/lib에 "독극물"을 포함한 모든 것; 다른 독립 라이브러리 디렉토리를 사용하는 데 문제가 없습니다.
리눅스 연결 시스템이 어떻게 작동하는지에 대한 설명 주셔서 감사합니다. 완벽하게 일했습니다. – UsAaR33
libpthread.so를 libc.so에 링크 할 때 (LD_DEBUG를 사용하여) 충돌이 발생합니다. ld.so --list에 의해 오는 미래의 사람들에게 주목해라. 이것은 당신이 다른 링커들과 함께 ldd를 할 수있게 해준다. – UsAaR33