视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
sdcc编译说明
2025-10-08 00:22:48 责编:小OO
文档
1.1 单文件工程

只有一个源代码文件的话,只需执行 sdcc foo.c 命令,就可将源代码编译成符合intel hex格式的代码了。

期间sdcc会产生下列的输出文件:

foo.asm 汇编代码,由编译器创建

foo.lst 汇编列表文件,由汇编器创建

foo.rst 更新过的列表文件,由链接器创建

foo.sym 符号列表文件,由汇编器创建

foo.rel/foo.o 就是obj文件

foo.map 内存映射文件

foo.mem 内存使用统计文件

foo.ihx intel hex格式的代码

如果使用了调试模式,还会有:

foo.adb 用于创建.cdb文件的含有调试信息的中间文件

foo.cdb 用于调试的文件,有一个专门的文档讲这种文件的格式

foo. Absolute Object Module Format(AOMF)文件

foo.dump 用于调试编译器本身的dump文件

1.2 多文件工程

假设main函数在foomain.c中,另外还有foo1.c和foo2.c,那么可以这样编译:

sdcc -c foo1.c

sdcc -c foo2.c

sdcc foomain.c foo1.rel foo2.rel

第三条命令也可以换成下面的两条命令:

sdcc -c foomain.c

sdcc foomain.rel foo1.rel foo2.rel

如果是写成后面这种形式,最后一条命令中的第一个rel文件必须包含main函数

1.3 ihx文件的后处理

.ihx文件不能直接用于miniICP的输入往LPC900里面烧,要经过一步处理:

pachihx foo.ihx > foo.hex

这样foo.hex就可以拿去烧了

1.4 使用lib库

如果要用到标准库之外的lib库,可以写这样的命令:

sdcc foomain.c foolib.lib -L mylib

-L选项指定库的搜索路径,可以是相对路径,也可以是绝对路径

sdcc的lib文件都是纯文本,自带的标准库的内容是相关rel文件的列表

用sdcclib做出来的lib是一种带标签的纯文本

1.5用sdcclib制作库

假设一个库libfoo.lib包括libfoo1.c和libfoo2.c两个源代码文件,可以这样来生成libfoo.lib:

sdcc -c libfoo1.c

sdcc -c libfoo2.c

sdcclib libfoo.lib libfoo1.rel

sdcclib libfoo.lib libfoo2.rel

这样得到libfoo.lib以后,还可以用

sdcclib -s libfoo.lib

查看库中包含的符号,或者用

sdcclib -m libfoo.lib

查看库中包含的rel文件的名字下载本文

显示全文
专题