我尝试使用NDK-build命令来建立Android共享对象,源编译很好,但后来我得到这个错误:NDK文件名或扩展名是太长
make (e=206): The filename or extension is too long.
如果任何机构可以告诉我是什么导致这个问题,以及如何解决它。
谢谢。
我尝试使用NDK-build命令来建立Android共享对象,源编译很好,但后来我得到这个错误:NDK文件名或扩展名是太长
make (e=206): The filename or extension is too long.
如果任何机构可以告诉我是什么导致这个问题,以及如何解决它。
谢谢。
您点击了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)
更容易 - 这种方式可以确保列出这些库的顺序不会导致链接问题。
感谢您的回放,但是我已经将1450多个c源文件分散在多个文件夹和子文件夹中,正如您可以从命令行输出中看到的那样,并且我认为需要花费相当多的时间来分割我的andorid。mk文件到多个make文件并合并它们,这当然是我的最后手段,但有没有一种方法可以在没有命令行的情况下编译Android.mk文件(我正在运行Windows 7),我的意思是另一个应用程序不是绑定到上面提到的Windows命令长度限制(8191个字符),我使用了eclipse builder,但它给出了相同的错误。 –
使用ubuntu而不是Windows 7更容易构建? – simo
正如我所解释的,您可以将所有内容保存在一个Android.mk文件中,并且可以通过以半自动方式添加一些“分隔符”来完成拆分。如果你把你的Android.mk放在pastebin或类似的地方,我可以帮你。 –
也许作为一种解决方法,你可以尝试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
谢谢,我不认为它会工作,因为这[Windows命令长度限制](http://support.microsoft.com/kb/830473)Alex Cohn refrenced说我只有8191个字符限制命令,我有1450多个源文件,这意味着我不能通过缩短路径长度来实现,单独的文件名就会超过这个限制。 –
使用ubuntu而不是使用Windows 7构建起来更容易吗? – simo
请发布命令行。 – Juliano
你这样做会导致这个错误?它抱怨哪个文件名? –
构建过程花费了大约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) –