2014-04-10 100 views
2

我把一些庫在Android 4.3到Android 4.4Android 4.4系統,不確定參考__printf_chk

所使用的是Android 4.3,現在,給出以下的錯誤使用的是Android 4.4源

編譯時,編譯項目

/家/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105:error:undefined reference to'__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:error:undefined reference to'__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 reference to'__printf_chk' collect2:error:ld returned 1退出狀態

解決此問題的任何指針?

+0

使用遞歸grep來確定這是/被使用和定義的位置。您是否在版本之間移動目標文件,而不是移動已清理的源文件?您是否在代碼中使用非公共內部功能? –

+0

我只是移動源...谷歌搜索,看起來像FORTIFY_CHECK導致printf調用這個 – vishalm

+0

找出一個解決方案:通過禁用FORTIFY_SOURCE編譯項目解決了問題 – vishalm

回答

2

通過建立與FORTIFY_SOURCE標誌項目禁用

添加以下行修正了問題的Android.mk LOCAL_CFLAGS += -U_FORTIFY_SOURCE

0

我認爲你的回答可以改進:

Fixed the issue by building the project with FORTIFY_SOURCE flag disabled 

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

你可能想例如:

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

另外,如果使用FORTIFY_SOURCE-O0,您可能會收到警告。它可以安全地忽略警告。您可以使用-O1或類似的方式發送報告。

FORTIFY_SOURCE適用於NDK R10及以上版本的應用程序。在此之前,FORTIFY_SOURCE僅用於系統庫。我不確定如何警惕「NDK R10」及以上版本。請參閱Android安全性討論郵件列表上的Fortify Sources and Stack Protectors (was: Is Fortify Source working with NDK)

此外,如果您在發佈版本中禁用FORTIFY_SOURCE,則應該觸發安全缺陷。