计算机 · 2022年4月20日 0

Windows下AndroidStudio联编C++项目踩坑

1.编译的源文件数量过多,单个源文件的路径太长,导致编译命令的长度超过了windows命令的长度限制,这种情况下需要设置Android.mk里的LOCAL_SHORT_COMMANDS和Application.mk里的APP_SHORT_COMMANDS为true。

此功能在 Windows 上可能很有用,在 Windows 上,命令行最多只接受 8191 个字符,这对于复杂的项目来说可能太少。它还会影响个别源文件的编译,而且将几乎所有编译器标记都放在列表文件内。

https://developer.android.com/ndk/guides/android_mk#local_short_commands

2.ndk16版本clang++无法正确处理windows路径分隔符

在同时使用BUILD_SHARED_LIBRARY和APP_SHORT_COMMANDS/LOCAL_SHORT_COMMANDS时,在最终链接生成so库这一步时,clang++可能会报错无法找到相应的.o文件或者其他.a文件。因为ndk在生成linker-list这一步时没有正确处理路径分隔符”\\”,导致对于一个”C:\Users\tom\xxx.o”这样的路径链接时会识别成”C:Userstomxxx.o”这样的路径,把路径分隔符吃掉,最后clang++表示无法找到路径对应的文件。

详细描述见github上的issue:

https://github.com/android/ndk/issues/986

https://github.com/android/ndk/issues/213

解决办法:

a.使用更高版本没有这个bug的ndk,也就是ndk21;

b.手动修复这个BUG,按照这个提交https://android-review.googlesource.com/c/platform/ndk/+/1126440 ,修改build-binary.mk里的那一行就可以了。