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

问题复现:

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

我这里是创建了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

修改部分:

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值