SylixOS移植常见问题——编译过多文件导致报错

tc666
tc666
tc666
8
文章
1
评论
2021年8月9日18:41:01 3 1,188

问题复现:

由于RealEvo IDE在Windows下使用的sh.exe支持的命令长度有限(命令要小于16K),如果需要编译的源文件过多,可能会报溢出错误或"make (e=87): 参数错误。"等,典型的表现型式有:

SylixOS移植常见问题——编译过多文件导致报错

SylixOS移植常见问题——编译过多文件导致报错

我这里是创建了0.c、1.c~999.c,编译为一个动态库,来复现这个错误。系统自动生成的mk文件为:test_big_range_so.mk

解决方案:

由于问题出现的原因显而易见,就是在编译过程中,执行到链接阶段时,由于需要链接的.c文件过多,导致链接的那一条命令长度超出16K,从而导致报错。

这里我提供两种解决方案。

1. 人为收束

既然是因为命令过长导致错误,那在不能削减编译文件数量的前提下,可以考虑将降低源文件的目录深度。即将一些无用的上级目录删去,或减短目录名称,以达到降低链接命令长度的目的。

本方案适用于工程文件数量并没有超出太多,且不想打开专家模式的用户。好处是如果能通过削减目录的方式达到成功执行链接指令,则不需要人为修改makefile,避免由于不熟悉专家模式而引入的其他问题。

2. 修改makfile

修改makefile适用于任何场景,原理就是将大量的源文件分段处理。以我这个工程为例,可以将0.c~249.c作为part1,250.c~499.c作为part2,500.c~749.c作为part3,750.c~999.c作为part4,怎么分完全是个人爱好。接着编译阶段保持不变,手动加入链接命令,分别AR每个PART的.o文件,则每次链接命令和ar命令都不会超出16K。

修改后的mk文件:test_big_range_so.mk

修改部分:

SylixOS移植常见问题——编译过多文件导致报错

SylixOS移植常见问题——编译过多文件导致报错

SylixOS移植常见问题——编译过多文件导致报错

SylixOS移植常见问题——编译过多文件导致报错

同理,如果是APP编译,将$($(target)_SO)改为$($(target)_EXE),再对应修改$(__LD)后的参数即可。

tc666
  • 本文由 发表于 2021年8月9日18:41:01
  • 转载请务必保留本文链接:http://www.databusworld.cn/10474.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:3   其中:访客  2   博主  1
    • gewenbin gewenbin

      赵哥,4.0ide好像有个short command选项,勾上那个就可以解决了 :cool:

      • qinfei qinfei 0

        太牛了