2013-10-17 43 views
3

我尝试使用NDK-build命令来建立Android共享对象,源编译很好,但后来我得到这个错误:NDK文件名或扩展名是太长

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

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

谢谢。

+0

请发布命令行。 – Juliano

+0

你这样做会导致这个错误?它抱怨哪个文件名? –

+0

构建过程花费了大约15分钟的时间来为每个源文件编写Like(“Compilethumb:ModlueName <=”sourcefile.c“),然后这个(SharedLibrary:libngspice.so),然后它开始构建这个编译过的文件最后的错误([所有的objectfiles .o] -Wl, - no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,现在-l c -lm -o D:/MyFiles/Android/Datte//obj/local/armeabi/libngspice.so,)失败 make(e = 206):文件名或扩展名太长 make:*** [ D:/MyFiles/Android/Datte//obj/local/armeabi/libngspice.so]错误206) –

回答

6

您点击了Windows command length limit。您应该使用一些静态库作为解决方法。通常情况下,人们使用以include $(BUILD_STATIC_LIBRARY)结尾的独立Android.mk文件编译其源代码树的分支,然后在“主”jni/Android.mk中将这些文件列为$(LOCAL_STATIC_LIBRARIES),以include $(BUILD_SHARED_LIBRARY)结尾。你的ndk-build会加载这个“主要”的makefile,所以它应该包括(明确地或者使用一些嵌套方法)所有的静态库makefile。

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

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

+0

感谢您的回放,但是我已经将1450多个c源文件分散在多个文件夹和子文件夹中,正如您可以从命令行输出中看到的那样,并且我认为需要花费相当多的时间来分割我的andorid。mk文件到多个make文件并合并它们,这当然是我的最后手段,但有没有一种方法可以在没有命令行的情况下编译Android.mk文件(我正在运行Windows 7),我的意思是另一个应用程序不是绑定到上面提到的Windows命令长度限制(8191个字符),我使用了eclipse builder,但它给出了相同的错误。 –

+0

使用ubuntu而不是Windows 7更容易构建? – simo

+1

正如我所解释的,您可以将所有内容保存在一个Android.mk文件中,并且可以通过以半自动方式添加一些“分隔符”来完成拆分。如果你把你的Android.mk放在pastebin或类似的地方,我可以帮你。 –

0

也许作为一种解决方法,你可以尝试SUBST目录 “d:\ MYFILES \ Android的\ Datte \ OBJ \本地\ armeabi \ OBJ文件\ ngspice \ spicelib” 为一个驱动器号,使用:

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

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

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

X:\parser\inp2y.o 
+0

谢谢,我不认为它会工作,因为这[Windows命令长度限制](http://support.microsoft.com/kb/830473)Alex Cohn refrenced说我只有8191个字符限制命令,我有1450多个源文件,这意味着我不能通过缩短路径长度来实现,单独的文件名就会超过这个限制。 –

+0

使用ubuntu而不是使用Windows 7构建起来更容易吗? – simo

4

您可以将它添加到Application.mk
APP_SHORT_COMMANDs:=真

这为我工作。

+0

这确实有用,但速度可能会很慢! – yano

相关问题