NDK报错:make: *** 没有规则可以创建“obj/local/armeabi/objs/a/a.o”需要的目标“/a.c”。 停止。
android开发用ndk编译so库时,有时直接从别的地方拷贝Android.mk文件,会报:
make: *** 没有规则可以创建“obj/local/armeabi/objs/a/a.o”需要的目标“/a.c”。 停止。
出现这个这个错误,可能是因为android.mk的文件格式可能是windows下拷贝,或是从网页copy,只要用vi在linux下打开Android.mk文件把行尾一些多余的看不见字符清除即可。
如果在NDK编译的时候遇到No rule to make target needed by *.o 请抽空看看这篇文章
由于平时写代码不小心,多半都是copy paste ,导致了一些自己不容易看出来的问题。
比如我之前有写soundTouch的JNI 在这个里面我有将两个lib 一个动态的一个静态的都放到 了一个Android.mk中
进行编译,但是发现莫名奇妙的报了个
“No rule to make target”
的错误,我找了大概有大半个小时才找到原因,就是我在一个Android.mk中声明了两个LOCAL_PATH变量导致ndk-build的时候
出现了语法上的错误,所以大家写Android.mk的时候一定要小心。
另外也有可能是在写某个变量事后面多加了个空格什么的,也会导致这个问题,总之要细心。
LOCAL_PATH在一个Android.mk文件中只能声明一个,而且CLEAR_VARS是不会清除LOCAL_PATH变量的,所以不用担心
在上面lib中定义的LOCAL_PATH会在下面的lib中用不了了。
make: *** No rule to make target `/cygdrive/g/workspaceNew/Live555/jni/./live/li
veMedia/H265VideoFileSink.cpp.cpp', needed by `/cygdrive/g/workspaceNew/Live555/
obj/local/armeabi/objs/live555/./live/liveMedia/H265VideoFileSink.cpp.o'. Stop.
检查Android.mk文件中 /cygdrive/g/workspaceNew/Live555/jni/./live/li
veMedia/H265VideoFileSink.cpp.cpp 这一行的声明和文件中的路径是否匹配