谁能给我讲讲联调的编译过程?
我有200多个源代码(包括.c和.h文件)作为一个系统共同编译,包括一个main.c文件。
也许是我对整个编译连接过程理解得太浅,也没有过大系统联调经验,每个单独的模块都编译运行成功过,放到一起编译的时候就出现了各种各样的问题。
开始是头文件之间的互相调用导致重复编译出错;后来我知道应该使用宏来解决这种问题。可对于每个模块都需要调用的<stdio.h>,<stdlib.h>,<string.h>等头文件便都在内部include进去了,没单独定义什么宏。
现在的问题是,要么会说我的某个头文件的结构体有语法错误(其实没有,单独运行那个模块没问题);要么(我调整头文件的顺序)列出一大堆"./tmp/cc****……"(内容太长太多忘了),说我很多变量multidefined。
所以现在我想知道整个编译连接到运行过程编译器所做的工作,还有,对于这种联调工作应该有什么注意事项?具体操作和整理过程?
谢谢指教!
另外,我是在linux 7.3下用C编程,gcc编译器。
问题点数:100、回复次数:8Top
1 楼ruancsdn(时间的灰烬)回复于 2003-12-04 09:29:32 得分 10
写个Makefile文件就可以了!Top
2 楼wangkun429111(王一)回复于 2003-12-04 09:33:41 得分 10
makefile文件如何写?Top
3 楼haothinking(好好)回复于 2003-12-04 09:40:41 得分 10
makefile 文件是不好写的。
但可以通过好多种方法生成该文件,具体你可以查相关资料。
Top
4 楼ruddy(淡红色)回复于 2003-12-04 10:15:58 得分 0
我的头文件内容写的肯定不合理, 如果包含关系不对,makefile也肯定不行.
我想知道编译过程,所以还是帮我理解一下编译连接过程和联调的正确格式吧!Top
5 楼CoolQ()回复于 2003-12-04 11:19:31 得分 30
multidefined就是重复定义阿,你需要用
#ifndef XXX
#define XXX
function declaration.....
function declaration.....
function declaration.....
#endifTop
6 楼ks9960(snk)回复于 2003-12-04 13:44:13 得分 30
把头文件全放到你的include目录,写一个all_include_.h包含所有你要用的头文件,然后在程序中就#include $yourHOME/include/all_include_.h,写all_include_.h的时候像CoolQ()那样写。makefile要自己看资料、例子学着写了。Top
7 楼chasehome(chase)回复于 2003-12-05 20:26:03 得分 10
建议用Qt工具qmake 可以做任何平台下的Makefile
CoolQ() 说的有理,设置编译条件,防止重复编译Top
8 楼ruddy(淡红色)回复于 2003-12-06 14:16:54 得分 0
现在问题基本解决了,
其实我在每个头文件里都加了宏保护来防止重复编译,编译过程是没错的,错在连接过程。
原因是头文件里定义了很多变量如int,char *等等,现在改到.c文件里定义变量,.h文件里用
extern声明一下就行了。
还有一些头文件和变量排列顺序的关系。
所以在调大型程序的时候一定要先画好每个功能模块的关系图,公用变量结构函数,以及相互调用关系。这比后来意识到加宏保护还是makefile等等小技巧都重要。
Top




