2014-04-10 4 views
2

내가 안드로이드 4.3 컴파일 할 때 이제 안드로이드 4.4 소스안드로이드 4.4, 정의되지 않은 참조가

를 사용하여 오류가 아래에 제공 컴파일하는 데 사용되는 4.4

프로젝트를 안드로이드 안드로이드 4.3에서 일부 라이브러리를 이동하고 __printf_chk하는

/집 /vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105 : 오류 : '__printf_chk에 대한 정의되지 않은 참조 ' /home/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105 : error : undefined '__printf_chk'에 대한 참조 /home/vishallocal/TI/android/kitkat/prebuilts/gcc /linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105 : 오류 : '__printf_chk'에 대한 정의되지 않은 참조 /home/vishallocal/TI/android/kitkat /prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105 : 오류 : '__printf_chk'에 대한 정의되지 않은 참조 collect2 : 오류 : ld가 반환되었습니다. 1 종료 상태

해결 방법에 대한 설명이 있습니까?

Fixed the issue by building the project with FORTIFY_SOURCE flag disabled 

Added following lines to Android.mk LOCAL_CFLAGS += -U_FORTIFY_SOURCE 

당신은 아마 원하는 :

+0

재귀 적 grep을 사용하여 이것이 사용되거나 정의 된 위치를 파악합니다. 제거 된 소스를 이동하는 대신 오브젝트 파일을 버전간에 이동 했습니까? 코드에서 비공개 내부 기능을 사용하고 있습니까? –

+0

나는 소스를 옮겼다. 주위를 돌아 다니며 FORTIFY_CHECK가 printf를 호출하여 이걸 호출했다. – vishalm

+0

해결책을 찾아 냈다. FORTIFY_SOURCE를 비활성화하여 프로젝트를 컴파일하면 문제가 해결된다. – vishalm

답변

2

내가 당신의 대답은 개선 될 수 있다고 생각 LOCAL_CFLAGS += -U_FORTIFY_SOURCE

0

을 Android.mk하는

추가 된 다음 줄 비활성화 FORTIFY_SOURCE 플래그 프로젝트를 빌드하여 문제를 해결 예 :

ifeq ($(APP_OPTIM),debug) 
    LOCAL_CFLAGS += -U_FORTIFY_SOURCE 
endif 

FORTIFY_SOURCE-O0을 사용하는 경우 경고 메시지가 표시 될 수도 있습니다. 경고를 무시해도 안전합니다. 너는 -O1 또는 비슷하게 waring을 파견 할 수있다.

FORTIFY_SOURCE은 NDK R10 이상의 응용 프로그램에서 사용할 수 있습니다. 그 전에는 FORTIFY_SOURCE이 시스템 라이브러리에서만 사용되었습니다. "NDK R10"이상을 지키려는 방법을 잘 모르겠습니다. Android 보안 토론 메일 링리스트의 Fortify Sources and Stack Protectors (was: Is Fortify Source working with NDK)을 참조하십시오.

또한 릴리스 빌드에서 FORTIFY_SOURCE을 비활성화하면 보안 결함이 야기됩니다.