因此,使用CMake

时间:2018-03-05 09:22:29

标签: android c++ cmake

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

我在子目录中有多个静态库,主目录(jni/)正在生成SO文件。我在子目录中单独编写了CMakeLists.txt,并将它们(add_subdirectory)包含在jni/CmakeLists.txt文件中。
我看到编译正在进行但无法在 build / intermediates / cmake / release / obj / armeabi project / libs 文件夹中找到.so文件。但是我在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 < / p>

完整命令:

  

[2/2]:&amp;&amp; / home / suman / Android / android-ndk / toolchains / llvm / prebuilt / linux-x86_64 / bin / clang ++ --target = armv7-none-linux-androideabi        --gcc-工具链= /家庭/苏曼氏/ Android设备/机器人-NDK /工具链/ ARM-Linux的androideabi-4.9 /预建/ 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, - 致命警告-Wl, - fix-cortex-a8 -Wl, - no-undefined -Wl,-z,noexecstack        -Qunused-arguments -Wl,-z,relro -Wl,-z,now        -shald,-son,liblogger.so -o /home/suman//build/intermediates/cmake/release/obj/armeabi-v7a/liblogger.so Logger / CMakeFiles / logger.dir / src / Logger.cpp。 Ø        /home/suman/Android/android-ndk/platforms/android-21/arch-arm/usr/lib/liblog.so-latomic -lm        &#34; /家庭/苏曼氏/ Android设备/机器人-NDK /源/ CXX-STL / GNU-的libstdc ++ / 4.9 /库/ armeabi-V7A / libsupc ++一个&#34;        &#34; /家庭/苏曼氏/ Android设备/机器人-NDK /源/ CXX-STL / GNU-的libstdc ++ / 4.9 /库/ armeabi-V7A / libgnustl_shared.so&#34; &安培;&安培; :

我错过了什么吗?

我的文件夹结构是旧的Android构建文件夹结构(Eclipse文件夹结构) - 平面结构。由于项目相当陈旧,并没有迁移到新的文件夹结构,而是在sourceSets文件中指定build.gradle

1 个答案:

答案 0 :(得分:0)

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

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