解决Android Studio 3.2.1中NDK编译代码时候出现警告": warning: conflicts with previous declaration here [-Wattributes]"

在使用Android Studio 3.2.1 结合 NDK r16/r18编译代码时候出现如下警告:

<built-in>: In function 'float abs(float)':
<built-in>: warning: conflicts with previous declaration here [-Wattributes]

关键是出现警告的代码文件中并不一定存在abs函数的调用。

这个警告产生的条件是在编译器中指定了STL,并且指定编译器为GCC,调用的源代码文件中恰好有STL的代码。

类似如下:

externalNativeBuild {
    cmake {
        cppFlags "-DANDROID_ARM_NEON=TRUE", "-DANDROID_TOOLCHAIN=gcc", "-DANDROID_PLATFORM=android-21", "-DANDROID_STL=c++_static"
        abiFilters 'armeabi-v7a'
    }
}

原因在于新版本的NDK r16/r18中,对于GCC部分的适配已经不是非常完善了,已经逐步迁移到CLANG(LLVM)了。导致STL进行编译的时候,会出现一些警告信息。这个警告信息是STL库的警告信息,跟我们自己的代码没有关系。

只需要指定 "-DANDROID_TOOLCHAIN=clang" 即可解决这个问题。

参考链接


NDK r13, -fexceptions -Wall --> warning: conflicts with previous declaration

发布者

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注