2011-10-04 2 views
20

다운로드 및 컴파일 됨 glibc-2.13. malloc()을 수행하는 샘플 C 프로그램을 실행하려고 할 때. 나는이 문제의 커널 버전이 아니다 elf file OS ABI invalidglibc : elf 파일 OS ABI가 유효하지 않음

누군가 내 커널 버전은 리눅스 2.6.35.9

+0

정보가 부족합니다. libc와 연결하고 실행하고 있습니까? – Mat

답변

29

것을이 issue.Please 노트 해결에 내 어떤 포인터가 도움이 통과시겠습니까 오류 다음 얻는다.

시스템의 로더가 새로운 Linux ABI를 지원하지 않습니다. 상대적으로 최근까지 리눅스 ELF 바이너리는 System V ABI를 사용했습니다. 최근 STT_GNU_IFUNC를 지원하기 위해 Linux ABI가 추가되었습니다. 시스템 C 라이브러리에서 STT_GNU_IFUNC를 지원하는 로더를 업데이트 한 다음 Linux ABI 유형의 ELF 객체도 인식해야합니다.

STT_GNU_IFUNC의 역할에 대한 이해를 돕기 위해 Dave Miller's blog entry on STT_GNU_IFUNC for Sparc을 참조하십시오.

+1

안녕하세요. 감사합니다. mkj. 그것은 훌륭한 정보였습니다. 방금 ld-linux.so (기본적으로 ld-2.13.so)를 대체하고 나에게 도움이되는 것들이 생겼다. 혹시 궁금한 점이 있다면, 제 설정은 리눅스 디스크없는 타겟을 만들어 버추얼 박스에서 실행하는 것과 같습니다. 문제는 root-fs에서 libc.so.6 (glibc-2.9 정도)을 libc.so.6 (glibc-2.13)으로 대체했을 때 나타났습니다. 이전 libc.so의 OS-ABI를 비교했을 때. 6에서는 "system V"를 보여 주었는데, 당신이 말한 것처럼 새로운 것이 "Linux"를 가지고있었습니다. – Kapil

+0

아, 나는 로더를 교체하지 않고 시스템 C 라이브러리를 교체했다는 것을 깨닫지 못했습니다. 또는 필자의 조언에 좀 더 구체적이었습니다. 나는 LD_LIBRARY_PATH를 사용하여 대체 라이브러리를로드하는 것과 같은 일을하고 있다고 가정했다. 기꺼이 도와 줬다! – mkj

2

그것은 당신의 glibc는 --enable-multiarch 기본 설정이며 --enable-multiarch=no을 설정하여 사용하지 않도록 설정해야한다는 것입니다 내가 무엇을 말할 수에서 ifunc 새로운 리눅스 ABI

1

를 사용하여 강제 --enable-multiarch 플래그 지어진 가능하다.

0

최신 시스템에서 로더를 사용하는 경우이를 사용하여 작동하게 할 수 있습니다. 하지만 프로그램이 어디서나 로더를 휴대해야합니다. 프로그램을 컴파일하여 here으로 설명한 로더를 사용하거나 나중에 here과 비슷한 방식으로 프로그램을 컴파일하고 patchelf를 사용하여 나중에 패치 할 수 있습니다. 나에게 다른 곳에서 ld-2.15.so를 복사하여 ld-2.5.so를 가진 리눅스 2.6.18 (너보다 오래된)에서 OS ABI invalid 오류를주는 프로그램을 실행할 수 있었다.

참고 : NOT은 시스템 ld * .so 또는 ld-linux를 덮어 씁니다. -/