기존 glibc 대상 gcc/binutils 툴체인에서 uClibc를 사용할 수 있도록하기 위해 스크립트 작업을하고 있습니다. 남아있는 한 가지 문제는 pthread_cancel
이 dlopen
libgcc_s.so.1
일 필요가 있다는 것입니다. 호스트 GCC와 함께 제공되는 버전의 glibc에 의존 연결되어, 그래서 대신 교체 libgcc_s.so.1
할 libgcc_eh.a
에서 필요한 문자 (및 의존성)에 끌어 ld
의 -u
옵션을 사용하고 있습니다 :숨겨진 가시성 기호를 GNU binutils로 숨기려면 방법이 있습니까?
gcc -specs uclibc.specs -Wl,-u,_Unwind_Resume -Wl,-u,__gcc_personality_v0 \
-Wl,-u,_Unwind_ForcedUnwind -Wl,-u,_Unwind_GetCFA -shared -o libgcc_s.so.1
을
원칙적으로 완료되었지만 libgcc_eh.a
의 모든 기호는 가시성이 숨김으로 설정되어 있으므로 .so
파일의 출력은 모두 로컬이되어 .dynsym
기호 테이블에 추가되지 않습니다.
나는 바이너리 유틸리티를 사용하는 방법을 찾고 있어요 (아마도 objcopy
? 또는 링커 스크립트?)을 .so
파일 또는 다음의 기호를 취소 숨기기에 libgcc_eh.a
원래 .o
파일 중 하나에. 이것이 가능한가?
아마도'libgcc_eh.a'의 오브젝트 파일은 공유 된'libgcc_s.so'가 사용되지 않을 때 PIC 공유 라이브러리 나 PIE 실행 파일로 가져올 것이기 때문에 PIC 공유 라이브러리 나 PIE 실행 파일에서 사용할 수 있어야합니다. 어쨌든 textrel이 허용되는 i386에서는 적어도 작동 할 것입니다. –
편집을 보았습니다. 내 의견을 떠나는 이유는 * 왜 * 코드가 PIC로 컴파일되는지 설명하기 때문입니다. –