Android bionic libc 에서 특정 함수를 바꾸려고 하는데 undefined reference 에러가 납니다
안녕하세요
안드로이드 libc 인 bionic libc 에서
시스템 콜의 랩퍼 함수를 만들고 있습니다
read 에 대한 랩퍼 함수를 만든다고 예로 든다면
풀소스 디렉토리에서
sourcedir/bionic/libc/arch-arm/syscalls 디렉토리 내의
read.S 의 소스 중 함수 선언 관련된 부분을
.type read #function -> .type __read #function .globl read -> .globl __read read: -> __read
와 같이 고치고
sourcedir/bionic/libc/mydir/read.c 라는 파일을 만들어
#include <sys/types.h> #include <unistd.h> extern ssize_t __read(int fd, void *buf, size_t count); ssize_t read(int fd, void *buf, size_t count) { return __read(fd, buf, count); }
와 같이 작성하였습니다.
그리고 sourcedir/bionic/libc/Android.mk 파일을 수정하여
libc_common_src_files 에 mydir/read.c 라는 파일도 넣어
함께 컴파일 되게끔 작성 하였는데
막상 소스 루트 디렉토리에서 make 나 mmm ./bionic/ 과 같은 형식으로
컴파일을 하면
컴파일이 일부 되다가
target StaticExecutable: linker (out/target/product/generic/obj/EXECUTABLES/linker_intermediates/LINKED/linker)
out/target/product/generic/obj/EXECUTABLES/linker_intermediates/linker.o: In function `is_prelinked':
/home/taesaza0/src/android/mydroid/bionic/linker/linker.c:687: undefined reference to `read'
out/target/product/generic/obj/EXECUTABLES/linker_intermediates/linker.o: In function `load_library':
/home/taesaza0/src/android/mydroid/bionic/linker/linker.c:1115: undefined reference to `read'
out/target/product/generic/obj/EXECUTABLES/linker_intermediates/debugger.o: In function `debugger_signal_handler':
/home/taesaza0/src/android/mydroid/bionic/linker/debugger.c:73: undefined reference to `read'
out/target/product/generic/obj/STATIC_LIBRARIES/libc_nomalloc_intermediates/libc_nomalloc.a(ssp.o): In function `__guard_setup':
/home/taesaza0/src/android/mydroid/bionic/libc/bionic/ssp.c:48: undefined reference to `read'
이와 같이 undefined reference 라며 오류가 발생 합니다
혹시 왜 undefined reference 오류가 발생하시는지 아시는분 계신가요???
하루종일 삽질을 했는데 해결 법을 모르겠습니다
아시는분 답변 부탁드립니다.
감사합니다
댓글 달기