关于c:collect2exe-fatal-error-CreateProcess

明天解决了一个问题,就是:collect2.exe: fatal error: CreateProcess: No such file or directory。

其实实质上就是:在Windows上,传递给CreateProcess()的字符串(包含所有参数)的最大长度为32768个字符,看起来最终的链接器命令超过了这个限度。

咱们当初看看链接参数:

aarch64-none-elf-gcc -o oneos.elf -mcpu=cortex-a55 -Lexternal -nostartfiles -Wl,--gc-sections,-Map=oneos.map,-cref,-u,_start -z max-page-size=4096 -T board/linker_scripts/link.lds @.link_param.tmp -LD:\xiaoneng\oneos-qiyun\drivers\link -lc -lm

这么一看总的字符串长度,挺短的不是?其实不是这样的,因为有大量的须要链接的*.o文件门路存在于link_param.tmp。因而,咱们计算字符串长度的时候须要把它给开展,这一下就大了哟!!!很容易就超出了32767个字符!!!

晓得起因了,解决起来就有方向了,有以下方向:

  1. 躲避:让字符不要超过最大长度,把太多的.o文件间接归类为.a的库
  2. 全副代替:间接替换工具链,让它反对更大长度
  3. 局部代替:应用反对超出最大长度为32767个字符,这里能够间接代替collect2.exe

这里改的形式就是应用了第三种计划,简略高效。

当然,还有各种有意思的改发,比方让代码的目录放在盘符根目录,其实也是躲避的一种,因为这样无效减小了*.o的门路,变相的减小了传递给CreateProcess()的字符串,也算是曲线救国了。。。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据