LLVM在Android NDK工具链中的用途是什么?
简要回顾一下:
我在Ubuntu上使用Gradlew构建本地项目,目标是arm和x86_64体系结构。似乎LLVM被用来调用arm-linux-androideabi-4.9以及x86_64(?)的C / C ++编译器
以下内容摘自armeabi-v7a / ndkBuild_build_output.log:
/ home / mypc / Android / android-ndk-r17c / toolchains / llvm / prebuilt / linux-x86_64 / bin / clang ++ -MMD -MP -MF / home / mypc / git / android-project-1 / build / intermediates / ndkBuild /debug/obj/local/armeabi-v7a/objs-debug/module-5/stream_cpp.od -gcc-toolchain /home/mypc/Android/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt / linux-x86_64 -fpic -ffunction-sections -funwind-tables -fstack-protector-strong -Wno-invalid-command-line-argument ...
..,以下内容摘自x86_64 / ndkBuild_build_output.log:
/ home / mypc / Android / android-ndk-r17c / toolchains …
您如何才能为CMakefor gcc和clang作为后处理步骤添加二进制剥离,但仅在发行版中?MSVC默认情况下会删除,因此不必进行处理。
其中一个问题是,clang没有一个-s编译标志,但gcc不这样做,这样是行不通的。
另一个想法是使用strip命令。该-s开关再次上存在Linux,但不是XCode(这是Apple的开发工具链)。
因此,最后的选择是使用该strip命令,除了二进制本身之外,不带任何参数,而二进制本身似乎是一个不错的通用解决方案。如何使用CMake?
我有一个 Android NDK 项目,我正在尝试通过Gradle + CMake构建它。
构建.gradle:
apply plugin: 'com.android.library'
allprojects {
repositories {
jcenter()
google()
}
}
android {
compileSdkVersion 27
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_ABI=armeabi-v7a",
"-DANDROID_PLATFORM=android-16",
"-DANDROID_STL=gnustl_static",
"-DANDROID_CPP_FEATURES=rtti exceptions",
"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY=libs"
}
}
}
buildTypes {
release {
ndk {
abiFilters "armeabi-v7a"
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
ndk {
abiFilters "armeabi-v7a"
}
}
}
externalNativeBuild {
cmake { …Run Code Online (Sandbox Code Playgroud)