2017-10-23 29 views
0

libc를 사용하지 않고 Linux에서 공유 오브젝트 파일을 빌드 할 수 있습니까? 나는 -nostdlib을 사용하여 공유 객체를 만들려고했는데 내장 함수 'memset'에 대해 상충되는 유형이 있다고 불평합니다 (빌드하려고하는 공유 객체 내에 정의 된 함수의 자체 버전이 있습니다).libc없이 공유 오브젝트 폴더 컴파일

공유 오브젝트 파일 내에서 libc 기능을 사용하지 않습니다. 다음과 같이 내가 공유 객체를 구축하고있다 : - 당신이 -nostdlib와 연결하면, 당신은 또한뿐만 아니라 -ffreestanding 및/또는 -fno-builtin 컴파일해야

CC  = gcc 
CFLAGS = -Wall -Wextra -Werror -nostdlib 
OUTPUTDIR = ./build 
test: outputdir 
    $(CC) $(CFLAGS) -c -fPIC test.c -o ${OUTPUTDIR}/test.o 
    $(CC) $(CFLAGS) ${OUTPUTDIR}/test.o -shared -o ${OUTPUTDIR}/libtest.so 

outputdir: 
    mkdir -p ${OUTPUTDIR} 

clean: 
    rm -rf ${OUTPUTDIR} 

답변

1

.

glibc에 연결하지 않고 libc.so.6 심볼을 참조하지 않도록주의해야합니다. 상황이 표면적으로 진행되는 것처럼 보일 수 있지만 특정 환경에서 파손이 생기기 쉽습니다. 특히 IFUNC가 glibc에 추가되면 더욱 그러합니다. (Intel did that with the ICC 16 compiler library.)

+0

감사합니다. 이로 인해 문제가 해결되었습니다. –