我正在尝试使用 ndk-build 命令为 Android 构建一个共享对象,源代码编译良好,但随后出现此错误:
make (e=206): The filename or extension is too long.
如果任何机构可以告诉我是什么导致了这个问题以及如何解决它。
谢谢。
我正在尝试使用 ndk-build 命令为 Android 构建一个共享对象,源代码编译良好,但随后出现此错误:
make (e=206): The filename or extension is too long.
如果任何机构可以告诉我是什么导致了这个问题以及如何解决它。
谢谢。
您达到了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)
- 这样您就可以保证列出这些库的顺序不会导致链接问题。
您可以将此添加到 Application.mk
APP_SHORT_COMMANDs :=true
这对我有用。
也许作为一种解决方法,您可以尝试将目录“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