android - 使用 CMake 在 Android Studio 中未生成 SO 文件

标签 android c++ cmake

我们使用 Android.mk & Application.mk NDK构建系统。由于我们在本地层中有多个项目正在使用的通用模块,因为其他项目已经支持 CMakeLists.txt ,我们也将我们的 Android 项目迁移到 CMake。

我在子目录中有多个静态库,主目录 ( jni/ ) 正在生成 SO 文件。我写了CMakeLists.txt单独在子目录中,并将它们 (add_subdirectory) 包含在 jni/CmakeLists.txt 中文件。
我看到编译正在进行但找不到 .so 中的文件构建/中间体/cmake/发布/obj/armeabi 项目/库 文件夹。但我在 Android Studio Gralde 中看到了以下消息

以下摘录:

-soname,liblogger.so -o /home/suman//build/intermediates/cmake/release/obj/armeabi-v7a/liblogger.so Logger/CMakeFiles/logger.dir/src/Logger.cpp.o



完整命令:

[2/2] : && /home/suman/Android/android-ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --target=armv7-none-linux-androideabi --gcc-toolchain=/home/suman/Android/android-ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 --sysroot=/home/suman/Android/android-ndk/sysroot -fPIC -isystem /home/suman/Android/android-ndk/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fno-integrated-as -marm -Wa,--noexecstack -Wformat -Werror=format-security -frtti -fexceptions -fvisibility=hidden -fstack-protector-all -Wall -c -fmessage-length=0 -Os -DNDEBUG
-Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a --sysroot /home/suman/Android/android-ndk/platforms/android-21/arch-arm -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,liblogger.so -o /home/suman//build/intermediates/cmake/release/obj/armeabi-v7a/liblogger.so Logger/CMakeFiles/logger.dir/src/Logger.cpp.o /home/suman/Android/android-ndk/platforms/android-21/arch-arm/usr/lib/liblog.so -latomic -lm "/home/suman/Android/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a" "/home/suman/Android/android-ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libgnustl_shared.so" && :



我错过了什么吗?

我的文件夹结构是旧的 Android 构建文件夹结构(Eclipse 文件夹结构) - 平面结构。由于项目非常古老且庞大,因此没有迁移到新的文件夹结构,而是我们指定 sourceSetsbuild.gradle文件。

最佳答案

1) 解决了问题。我在声明 project() 之前设置了一些 CMake 变量,因此这些设置仅在该文件中生效。它没有传播到included_directories() 和add_dependencies()。

2) 不要在 build.gradle 文件中声明任何 externalCMakeBuild { cppFlags }。它弄乱了构建系统设置的 NDK 标志。

关于android - 使用 CMake 在 Android Studio 中未生成 SO 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49107000/

相关文章:

java - 多次初始化 FirebaseDatabase.getInstance() 是否会影响性能?

java - Guava vs Google Play服务:构建冲突

c++ - 如何确定作为对象传递给另一个类的模板类的数据类型

c++ - 我怎样才能将另一个迭代器的地址归因于一个迭代器?

c++ - 找到最小化 sigma(abs(a[i]+c[i])) 的递增序列 a[]

boost - 在测试可执行文件中使用特定类但在生产可执行文件中不使用 Boost 序列化的链接器错误

android - Firebase Crashlytics - java.lang.IllegalStateException : The Crashlytics build ID is missing

Android - 在 AsyncTask 中执行后

c++ - cmake制作多个可执行文件

c++ - CMake:子目录可以继承编译特性吗?