![링커가 /lib에서 라이브러리를 찾을 수 없습니다.](https://linux55.com/image/65975/%EB%A7%81%EC%BB%A4%EA%B0%80%20%2Flib%EC%97%90%EC%84%9C%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EB%A5%BC%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
나는 동적으로 연결된 비지박스를 포함하는 initramfs와 Linux 커널을 사용하여 x86_64 대상용 소형 임베디드 시스템을 구축하고 있습니다.
libm.so.6
필요한 라이브러리( , libc.so.6
) /lib
와 링커를 ld-linux-x86-64.so.2
설치해 보았습니다 /lib64
(비지박스 바이너리가 이 위치에서 요청하기 때문입니다).
lib
├── libc.so.6
└── libm.so.6
lib64
└── ld-linux-x86-64.so.2
그러나 연결에 실패합니다.
/sbin/init: error while loading shared libraries: libm.so.6: cannot open shared object file: No such file or directory
나는 모든 것을 다음으로 옮겨서 작동하게 만들었습니다 /lib64
.
lib64
├── ld-linux-x86-64.so.2
├── libc.so.6
└── libm.so.6
/lib
또는 및 사이에 심볼릭 링크를 생성하여/lib64
lib
├── ld-linux-x86-64.so.2
├── libc.so.6
└── libm.so.6
lib64 -> lib
하지만 첫 번째 구성이 작동하지 않는 이유를 아직도 이해하지 못합니다. 링커가 에서 라이브러리를 찾을 수 없는 이유는 무엇입니까 /lib
?
편집하다:작동하게 하려면 (yaegashi에게 감사드립니다):
- initramfs 루트 디렉터리를 입력합니다.
/etc/ld.so.conf
필요한 라이브러리 경로로 파일을 만듭니다.echo /lib > etc/ld.so.conf
파일 을 생성하세요
ld.so.cache
.ldconfig -r .
- initramfs를 다시 빌드하세요. 마치다
답변1
읽다수동ld.so(동적 링커/로더). 실제 검색 경로는 주로 /etc/ld.so.cache
내장된(컴파일에서) 경로 또는 ld.so 바이너리에 의해 결정됩니다. 따라서 플랫폼 구성과 glibc 구축 방법을 확인하세요./etc/ld.so.conf
ldconfig
LD_DEBUG=libs
환경 변수에서 바이너리 세트를 실행하여 ld.so의 자세한 활동을 관찰 할 수 있습니다 .
$ LD_DEBUG=libs ls
17441: find library=libselinux.so.1 [0]; searching
17441: search cache=/etc/ld.so.cache
17441: trying file=/lib/x86_64-linux-gnu/libselinux.so.1
17441:
17441: find library=libacl.so.1 [0]; searching
17441: search cache=/etc/ld.so.cache
17441: trying file=/lib/x86_64-linux-gnu/libacl.so.1
17441:
17441: find library=libc.so.6 [0]; searching
17441: search cache=/etc/ld.so.cache
17441: trying file=/lib/x86_64-linux-gnu/libc.so.6
...
답변2
빠른 수정으로 .bashrc 를 통해 lib
쉘 환경 변수에 추가하세요.LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib
그런 다음,
source /home/user/.bashrc