- 每个.c分别并行的用 gcc -c 指令编译成每个.o(该过程编译器不会分析源文件之间的关系)(gcc中多包含头文件文件夹,不会出错。但是如果现在编译的是有问题的.c文件,就出错了)
- 用ld -r指令将他们合并为一个.o
- 然后 nm -u 指令找出该.o中未定义的符号
- nm -s 指令重定义这些符号地址,从别的已编译的a.out获得
- 用 gcc -o 指令生成最后的out文件
- 从这个.out文件中提取出 text段data段bss段(这些是程序运行的实体,当然还有其它一些信息段段,但是我们不需要了),再添加上一些自己定义的协议头什么的,就形成了我们自己的加载协议文件了。
上述得到的协议文件通过串口等方式,传输到已有下位机系统中,这个系统按照协议解析格式(在线的过程),按照text段data段bss段起始地址把这些代码段搬运到对应内存位置,即可运行啦。
这个自己可以写个IDE进行实现,就是一个动态加载工具了,还是比较简单的。 这个动态加载技术在很多嵌入式实时操作系统中比较常见。