赞
踩
这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记,目的是作为个人后续回顾复习使用。
test.c
存放路径:E:\Dosbox\exp2-1\test.c
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return 0;
}
启动DOSBox,由于事先在DOSBox的配置文件DOSBox 0.74-3 Options.bat底部添加了如下命令:
# 意为把E:\Dosbox目录作为虚拟C根目录
MOUNT C: E:\Dosbox
# 配置环境变量
set PATH=%PATH;C:\BC\BIN;
C:
所以,DOSBox启动后会自动挂载E:\Dosbox为C:根目录,并将E:\Dosbox\BC\BIN所在文件夹设置为环境变量,即BC3.1可执行文件所在目录,如下图所示:
因此,现在我们可以将路径切换到test.c
文件所在位置,即使用命令cd .\exp2-1
,如下图所示:
然后使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib test.c
即可将C源程序编译成obj目标文件,如下图所示:
该条命令中的bcc
是编译命令,它会执行BC\BIN目录下的bcc.exe文件;-c
表示将C源文件编译成目标文件OBJ;-ml
表示指定内存模式为large模式;-Ic:\bc\include
表示指定包含头文件路径为 c:\bc\include
;-Lc:\bc\lib
表示指定库文件路径为 c:\bc\lib
;test.c
表示等待编译的C源程序的文件名称。编译之后,当前目录下会生成一个 test.obj 文件,即目标文件,如下图所示:
为了得到扩展名为exe的可执行文件,我们还需要将test.obj目标文件和生成可执行文件所需的其他目标文件链接在一起。使用这条命令:tlink c:\bc\lib\c0l.obj test.obj,test,test,c:\bc\lib\cl.lib
即可启动BC提供的链接器tlink.exe,如下图所示:
该条命令中的tlink
是链接命令,它会执行BC\BIN目录下的tlink.exe文件;c:\bc\lib\c0l.obj
表示使用支持ml内存模式的启动模块c0l.obj;test.obj
表示上一个步骤(编译)得到的目标文件的文件名称;test,test
中的第1个test表示最终可执行文件的文件名称,第2个test表示map文件的文件名称;c:\bc\lib\cl.lib
表示使用和ml模式对应的运行库cl.lib。链接后,最终生成了一个可执行文件test.exe和一个文件test.map,如下图所示:
使用命令test.exe运行编译链接得到的可执行程序,屏幕上显示出“Hello, world!”字符串,如下图所示:
使用C语言编写的实际项目中,一个工程通常会采用模块化的方法,因此会有多个源文件。我们需要通过编译、链接这两个步骤才能得到最终的可执行文件,接下来就使用简单示例展示一下多文件程序的生成过程。
假设现在有一个应用程序,该应用程序由3个源文件组成。
ma 程序代码
ma.h
// ma.h
#ifndef _MA_H_
#define _MA_H_
void a_print();
#endif
ma.c
// ma.c
#include <stdio.h>
#include "ma.h"
void a_print()
{
printf("aaaaa\n");
}
mb 程序代码
mb.h
// mb.h
#ifndef _MB_H_
#define _MB_H_
void b_print();
#endif
mb.c
// mb.c
#include <stdio.h>
#include "mb.h"
void b_print()
{
printf(" bbbbb\n");
}
test.c 程序代码
// test.c
#include "ma.h"
#include "mb.h"
int main(void)
{
for (; ;)
{
a_print();
b_print();
}
}
使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib ma.c
编译 ma.c
,得到ma.obj,如下图所示:
使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib mb.c
编译 mb.c
,得到mb.obj,如下图所示:
使用这条命令:bcc -c -ml -Ic:\bc\include -Lc:\bc\lib test.c
编译 test.c
,得到test.obj,如下图所示:
使用这条命令:tlink c:\bc\lib\c0l.obj ma.obj mb.obj test.obj,test,test,c:\bc\lib\cl.lib
链接ma.obj、mb.obj、test.obj和生成可执行文件所需的其他库文件,得到test.exe,如下图所示:
test.exe运行结果如下图所示:
链接多个文件时,tlink命令很长,为了方便我们进行程序设计,BC3.1可以将链接命令写入一个链接文件的文本文件中。如此一来,只需执行命令:tlink @链接文件的文件名称
通过引用链接文件就能够对目标文件进行链接。
其中,链接文件的文件名称可以由我们用户进行自定义,例如本次示例程序的链接文件我们命名为testlink。然后,进行链接工作时执行的命令的格式就是:tlink @testlink
链接文件的文件内容可以分行书写,以原命令中的逗号为界进行分隔或者还可以使用“+”符号做为续行符,例如testlink的文件内容可以是:
c:\bc\lib\c0l.obj ma.obj mb.obj test.obj
test
test
c:\bc\lib\cl.lib
还可以这样书写:
c:\bc\lib\c0l.obj +
ma.obj +
mb.obj +
test.obj
test
test
c:\bc\lib\cl.lib
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。