关于c:collect2exe-fatal-error-CreateProcess

2次阅读

共计 746 个字符,预计需要花费 2 分钟才能阅读完成。

明天解决了一个问题,就是: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()的字符串,也算是曲线救国了。。。

正文完
 0