다운로드 및 컴파일 됨 glibc-2.13. malloc()을 수행하는 샘플 C 프로그램을 실행하려고 할 때. 나는이 문제의 커널 버전이 아니다 elf file OS ABI invalid
glibc : elf 파일 OS ABI가 유효하지 않음
누군가 내 커널 버전은 리눅스 2.6.35.9
다운로드 및 컴파일 됨 glibc-2.13. malloc()을 수행하는 샘플 C 프로그램을 실행하려고 할 때. 나는이 문제의 커널 버전이 아니다 elf file OS ABI invalid
glibc : elf 파일 OS ABI가 유효하지 않음
누군가 내 커널 버전은 리눅스 2.6.35.9
것을이 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을 참조하십시오.
안녕하세요. 감사합니다. 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
아, 나는 로더를 교체하지 않고 시스템 C 라이브러리를 교체했다는 것을 깨닫지 못했습니다. 또는 필자의 조언에 좀 더 구체적이었습니다. 나는 LD_LIBRARY_PATH를 사용하여 대체 라이브러리를로드하는 것과 같은 일을하고 있다고 가정했다. 기꺼이 도와 줬다! – mkj
그것은 당신의 glibc는 --enable-multiarch
기본 설정이며 --enable-multiarch=no
을 설정하여 사용하지 않도록 설정해야한다는 것입니다 내가 무엇을 말할 수에서 ifunc 새로운 리눅스 ABI
를 사용하여 강제 --enable-multiarch
플래그 지어진 가능하다.
최신 시스템에서 로더를 사용하는 경우이를 사용하여 작동하게 할 수 있습니다. 하지만 프로그램이 어디서나 로더를 휴대해야합니다. 프로그램을 컴파일하여 here으로 설명한 로더를 사용하거나 나중에 here과 비슷한 방식으로 프로그램을 컴파일하고 patchelf를 사용하여 나중에 패치 할 수 있습니다. 나에게 다른 곳에서 ld-2.15.so를 복사하여 ld-2.5.so를 가진 리눅스 2.6.18 (너보다 오래된)에서 OS ABI invalid
오류를주는 프로그램을 실행할 수 있었다.
참고 : NOT은 시스템 ld * .so 또는 ld-linux를 덮어 씁니다. -/
정보가 부족합니다. libc와 연결하고 실행하고 있습니까? – Mat