3

我正在尝试使用 ndk-build 命令为 Android 构建一个共享对象,源代码编译良好,但随后出现此错误:

make (e=206): The filename or extension is too long.

如果任何机构可以告诉我是什么导致了这个问题以及如何解决它。

谢谢。

4

3 回答 3

7

您达到了Windows 命令长度限制。您应该使用一些静态库作为解决方法。通常,人们使用以 . 结尾的单独 Android.mk 文件编译其源代码树的分支,include $(BUILD_STATIC_LIBRARY)然后将这些文件列在以 .结尾$(LOCAL_STATIC_LIBRARIES)的“主” jni/Android.mkinclude $(BUILD_SHARED_LIBRARY)中。您ndk-build将加载这个“主”makefile,因此它应该包括(显式或使用某种嵌套方法)所有静态库 makefile。

但这只是一种方便。如果您像现在一样使用单个jni/Android.mk文件,您可以获得相同的结果。

您可能还会发现将静态库列为更容易$(LOCAL_WHOLE_STATIC_LIBRARIES)- 这样您就可以保证列出这些库的顺序不会导致链接问题。

于 2013-10-17T21:49:29.367 回答
5

您可以将此添加到 Application.mk
APP_SHORT_COMMANDs :=true

这对我有用。

于 2013-12-05T21:22:13.120 回答
0

也许作为一种解决方法,您可以尝试将目录“D:\MyFiles\Android\Datte\obj\local\armeabi\objs\ngspice\spicelib”替换为驱动器号,使用:

subst X: "D:\MyFiles\Android\Datte\obj\local\armeabi\objs\ngspice\spicelib"

这可以节省一些空间并生成更小的命令行。但是,正如 Alex Cohn 所回答的,它可能无法解决您的问题,具体取决于 Windows 命令长度限制。此外,您必须更改您的 makefile 并更改,例如,

D:/MyFiles/Android/Datte//obj/local/armeabi/objs/ngspice/spicelib\parser\inp2y.o

为了

X:\parser\inp2y.o
于 2013-10-17T22:07:51.127 回答