NDK開發中,build.gradle中臨時添加了-fnoexception編譯選項:
externalNativeBuild {
cmake {
cppFlags '-std=c++11 -fexceptions' //!!!這里是新增的
arguments '-DANDROID_PLATFORM=android-21',
'-DCMAKE_BUILD_TYPE="Release',
'-DANDROID_ARM_NEON=ON',
'-DANDROID_STL=c++_shared'
// cppFlags '-std=c++11'
// arguments '-DANDROID_TOOLCHAIN=clang',
// '-DANDROID_STL=c++_static'
// cppFlags "-std=c++11 -fexceptions"
}
}
結果,點擊sync now之后,CMake腳本都失去了高亮,並且報錯提示clang++沒法識別-fnoexception。檢查發現,是CMake腳本中設定了CMAKE_CXX_FLAGS的值里面有-fno-exceptions導致的,去掉即可:
#SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions -fno-short-enums -Werror=non-virtual-dtor")
SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-short-enums -Werror=non-virtual-dtor")
也就是說,是build.gradle腳本和cmake的腳本中的C++編譯選項,對於是否啟用exception有沖突導致的。
