2

我正在将一些库从 Android 4.3 移动到 Android 4.4

以前在 Android 4.3 中编译的项目现在在使用 Android 4.4 源编译时会出现以下错误

/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”/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 退出状态

有关解决此问题的任何指示?

4

2 回答 2

2

通过在禁用 FORTIFY_SOURCE 标志的情况下构建项目来解决此问题

在 Android.mk 中添加了以下行 LOCAL_CFLAGS += -U_FORTIFY_SOURCE

于 2014-04-10T04:01:42.710 回答
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_SOURCEand ,您可能会收到警告-O0。忽略警告是安全的。您可以使用-O1或类似方式发送警告。

FORTIFY_SOURCE可用于 NDK R10 及更高版本的应用程序。在此之前,FORTIFY_SOURCE仅与系统库一起使用。我不确定如何保护“NDK R10”及更高版本。请参阅Android 安全讨论邮件列表中的Fortify Sources 和 Stack Protectors(原为:Is Fortify Source 与 NDK 一起使用) 。

此外,如果您FORTIFY_SOURCE在发布版本中禁用,那么它应该会触发安全缺陷。

于 2014-09-11T23:28:24.570 回答