.so 파일의 링커 스크립트? (libc.so) 그렇습니까?

.so 파일의 링커 스크립트? (libc.so) 그렇습니까?

현재 NAS(Zyxel NSA325)에서 Python을 실행하려고 합니다.

저는 Python 2.7과 pip를 실행하는 데 성공했고, pip를 사용하여 watchdog 모듈을 성공적으로 설치할 수 있었습니다. 나는 팔로우한다이 지침그런데, Python과 pip를 실행해 보세요.

watchdog 모듈을 사용하는 Python 스크립트를 실행할 때 매우 심각한 오류가 발생합니다.

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file

ELF 파일의 헤더가 어떻게 생겼는지 검색해 봤습니다.확실히which로 시작합니다 . 그래서 빠른 작업을 수행했고 결과는 다음과 같습니다 7f 45 4c 46..ELFcat /ffp/lib/libc.so

/* GNU ld script
 * Use the shared library, but some functions are only in
 * the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
         "elf32-littlearm")
GROUP ( libc.so.0 uclibc_nonshared.a AS_NEEDED ( ld-uClibc.so.0 ) )

분명히 이것은 ELF 파일이 아닙니다. 그래서 연구하는 데 더 많은 시간을 보냈고 이것이 다음과 같다고 생각했습니다.링커 스크립트.

하지만 지금은 아이디어가 없습니다. .so 파일에 링커 스크립트가 있는 이유는 무엇입니까? 맞아? 어떻게 해결할 수 있나요?

시스템 메시지:

# uname -a
Linux NSA325-v2 2.6.31.8 #2 Fri Jun 23 11:03:47 CST 2017 armv5tel GNU/Linux

답변1

라는 이름의 파일이 있다고 해서 .so반드시 공유 라이브러리일 필요는 없습니다. 이러한 파일은 (런타임이 아닌) 빌드 시 프로그램을 링크할 때 사용됩니다. 일반적으로 실제 공유 라이브러리에 대한 심볼릭 링크이지만 적어도 GNU를 사용하는 시스템에서는 ld링커 스크립트일 수도 있습니다. 이는 완벽합니다. 최신 glibc 기반 시스템을 살펴보면 libc.so거기에도 링커 스크립트가 있다는 것을 알 수 있습니다.

이것은 Python(또는 watchdog 모듈)이 libc.so대신 찾는 이유를 설명하지 않습니다 libc.so.0. Python 인터프리터의 구성이 잘못되었거나 watchdog 모듈의 잘못된 가정일 수 있습니다. 오늘 나중에 후자를 살펴보겠습니다. 전자라면 질문에 링크된 포럼에 문의하는 것이 좋습니다.

관련 정보