apue中重复定义的问题

来源:互联网 发布:单片机外部脉冲计数器 编辑:程序博客网 时间:2024/04/29 09:37

晚上被APUE的一个小程序弄得很郁闷:有两个程序,14-1.c(含main,并且调用了set_fl.c)和set_fl.c,每个里面都包含了apue.h和apuee_err.h。编译的时候重复定义是很正常的。可是在apue_err.h中添加了ifndef和define,和endif之后,还是出现这个问题。我就很纳闷,查了好多地方也没搞明白到底是为什么。后来,hh来帮我看,也是很迷茫。最后发现apue_err.h中,有err_sys等几个函数的定义。猜测可能是这样的:编译的时候生成了两个.o的文件:14-1.o和set_fl.o,并且每个.o文件都包含err_sys等的定义,最后两个.o文件链接的时候,就自然会出现问题了。如果从apue_err.h中,把函数的定义单独拿出来,放在apue_err.c(可以放在/usr/lib里面),编译的时候可能就会为apue_err.c单独成立一个.o文件,和14-1.o和set_fl.o是并列的,这样就能避免重复定义。

原创粉丝点击