我用 arm-2014.05-29-arm-none-linux-gnueabi-i686-mingw32.tar.bz2 这个工具链,
在windows平台编译arm linux 程序,
一开始文件比较少的时候,链接正常,
后来文件增多了, 链接出错:
arm-none-linux-gnueabi-gcc.exe: error: CreateProcess: No such file or directory.
离线
本来初衷是想让别的同事不安装虚拟机,
只能下载windows版本的arm linux工具链编译链接即可,
现在编译是没有问题, 链接出问题了,
看起来链接器还是有bug.
离线
stackoverflow.com 有很多提同样问题的同学, 但是都是x86 windows 的gcc, 都说是path的问题,但是我这个肯定不是path问题,因为文件少的时候链接正常。
离线
离线
编译cocos2dx,使用的3.10版本。前三个月打包apk都正常,昨天发布apk版本的时候忽然报错
[plain] view plain copy
arm-linux-androideabi-g++.exe: error: CreateProcess: No such file or directory清理工程后重来依然如此。有人说是ndk和工程目录路径太深。不想移动目录了。网上查了一下,在mk文件添加参数解决
Android.mk
LOCAL_SHORT_COMMANDS := trueApplication.mk
APP_SHORT_COMMANDS := true
找到搜索关键字了。
离线
根据上面两个关键字,找到这里
Android.mk文件语法详述
(6). LOCAL_SHORT_COMMANDS := true /flase
当你的module有很多的源文件,或者依赖很多的静态或动态库。这会强制编译系统使用一个中间的列表文件,并通过@$(listfile) 语法和library archiver 或者 static linker一起使用。
这在Windows上是非常有用的,因为它的命令行只接收最大8191个字符,这对于复杂的工程来说太小了。
这同样也会影响单个源文件的编译,如果将所有的编译器选项放在列表文件里面。
注意如果设置了‘true’以外的值,都会恢复成默认行为。
你也可以在Android.mk文件中定义APP_SHORT_COMMANDS来强制使你的工程中的所有modules使用这项功能
注意:默认我们不推荐启用这个功能,因为它会使得编译变慢。
该变量可以解决如下编译问题:make: execvp: /home/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux- androideabi-g++: Argument list too long
特别注意:
APP_SHORT_COMMANDS , LOCAL_SHORT_COMMANDS 可以解决链接时参数太长的问题(生成*.a *.so时中间文件过多)
然而,编译,生成 libcrypto.so时,
在libcrypto模块中采用LOCAL_SHORT_COMMANDS:=true来指定会导致编译错误
在Application.mk中指定 APP_SHORT_COMMANDS:=true可以顺利编译,链接
离线
果然是微软的锅: 命令提示符 (cmd.exe) 的命令行字符串限制
然而Linux并没有这个限制!
离线
以为 powershell 支持 8191以上个字符, 然后并没有。
离线