免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4243 | 回复: 7
打印 上一主题 下一主题

C语言头文件引起的错误 [复制链接]

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-05 21:37 |只看该作者 |倒序浏览
现在有三个文件apue.h 、 wait.c 、 14.6.c
apue.h中是各个函数的声明;
在wait.c中定义了apue.h中的几个函数WAIT_PARENT、WAIT_CHILD等,并且用到apue.h中的err_sys(仅仅是用到,而没有定义,err_sys函数在别处定义);
在14.6.c是主函数,也用到err_sys函数。

gcc -o a.out 14.6.c wait.c

出现如下错误:
  1. 14.6.c:(.text+0x38): multiple definition of `err_sys'
  2. /tmp/ccO4WyJS.o:wait.c:(.text+0x38): first defined here
复制代码
这是什么原因??

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
2 [报告]
发表于 2012-04-06 09:27 |只看该作者
apue.h有无ifndef

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
3 [报告]
发表于 2012-04-06 11:54 |只看该作者
回复 2# txdgtwpv


    有的。

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
4 [报告]
发表于 2012-04-06 12:21 |只看该作者
err_sys在哪里定义,是不是函数体在两个c文件里都有了

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
5 [报告]
发表于 2012-04-06 13:00 |只看该作者
回复 4# txdgtwpv


    err_sys()函数在apue.h中声明,在error.c文件中定义。
   

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
6 [报告]
发表于 2012-04-06 13:18 |只看该作者
本帖最后由 suanmeilizhi 于 2012-04-06 13:21 编辑

回复 4# txdgtwpv


    我想是不是因为我在apue.h头文件中,添加了#include "error.c",虽然apue.h中
  1. #ifndef __APUE_H__
  2. #define __APUE_H__
复制代码
但是编译器对每个文件是分别编译的,所以在文件wait.c和14.6.c中都#include "apue.h",就会包含两份error.c文件,而在error.c文件中是函数的定义(并不是声明),所以才会出现这样的情况。

所以我删除在apue.h中#include "error.c",makefile文件如下:
  1. inc=/home/lee/program/apue/apue.2e/include/
  2. error=/home/lee/program/apue/apue.2e/include/error.c
  3. a.out:14.6.c wait.c
  4.         gcc -I $(inc) -o a.out 14.6.c wait.c $(error)
复制代码
apue.h文件中/home/lee/program/apue/apue.2d/include/目录下。
这样就没有问题了。
不知是不是如我想的这样。

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
7 [报告]
发表于 2012-04-06 14:19 |只看该作者
suanmeilizhi 发表于 2012-04-06 13:18
回复 4# txdgtwpv


没错,而且没有充分理由时尽量不要include c文件

论坛徽章:
1
亥猪
日期:2013-10-30 23:29:55
8 [报告]
发表于 2012-04-06 14:54 |只看该作者
回复 7# txdgtwpv


    恩,好的,谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP