当前位置:  技术问答>linux和unix

APUE中程序8_4编译时的multiple definition问题

    来源: 互联网  发布时间:2017-05-01

    本文导语:  在学APUE,看到第八章,程序清单8_4中的程序需要调用8_3中定义的函数void pr_exit(int status),于是我把这两个.c文件放在同一个文件夹下,然后用命令 cc -o a.out pr_exit.c exitstatus.c 对其进行编译,但编译报错: multiple...

在学APUE,看到第八章,程序清单8_4中的程序需要调用8_3中定义的函数void pr_exit(int status),于是我把这两个.c文件放在同一个文件夹下,然后用命令 cc -o a.out pr_exit.c exitstatus.c 对其进行编译,但编译报错: multiple definition of 'err_sys(char const*, ...)'  同样其他几个错误处理函数也是多重定义的问题。

我的配置是把apue.h和error.c放在了usr/include/文件夹下,并在apue.h中最后一行#endif前面添加了#include   后来又在error.c文件首尾添加了
#ifndef ERROR_C
#define ERROR_C
 ...
#endif(此句在文件尾)

后来我换了一种方式,逐步编译,先作编译预处理,再编译,再汇编,生成了两个.o文件后最后再用 cc -o a.out pr_exit.o exitstatus.o 进行编译,还是报和上面一样的错误。

之前编译程序的时候都是单文件的源程序,是没有问题的。但这次是两个.c文件一起编译,就出现了多重定义的问题,求各位帮忙啊~ 多谢了~!

|

ifndef这种阻止多重包含的方法仅仅针对一个编译单元,它能确保的是同一个头文件不会在一个编译单元内展开两次,对于多个编译单元的多重定义问题没有帮助。
所以你的两个编译单元都有相同的函数的定义,自然就会报错。
在编译的时候把error.c也一起编译进去,而不是两个.c文件将其#include进去。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 下载了APUE源码,怎么打不开啊?
  • 文件名为“apue.tar.Z”的文件在UNIX下怎么打开?大家帮帮忙
  • APUE第2版的例2-1的疑问
  • apue书上的概念,读过这本书的请进
  • 刚学完apue,大家给个建议
  • 求apue的课后答案~~~~~~~~~~~~~
  • APUE 看完之后,拿什么练练手?
  • apue.h的问题
  • APUE+macro
  • apue中的一个问题
  • APUE相关章节不容易理解。
  • 关于apue2 中一个例子的提问
  • apue书的的信号函数,看不懂
  • APUE中 system函数的实现中的问题
  • 哪位兄弟在看apue?相互交流一下
  • APUE中“信号”一节的问题
  • apue 上的 Figure3.10运行后,输出怎么是空白
  • apue学习问题 第八章 进程控制 相关
  • apue page113
  • 关于unix环境高级编程的apue的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,