我们正在使用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
。
答案 0 :(得分:0)
1)解决了该问题。我在声明project()之前设置了一些CMake变量,由于这些设置仅在该文件中生效。它没有传播到included_directories()和add_dependencies()。
2)不要在build.gradle文件中声明任何externalCMakeBuild {cppFlags}。搞砸了构建系统设置的NDK标志。