您现在的位置: 爱51代码网 >> 范文 >> 文章正文
multiple definition of 'err_sys(char const*, ...)'

程序清单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>  后来又在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进去。

.c文件一起编译进去就好了~

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    在lotus BS系统里怎样方便实现统
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    bash 脚本启动后台进程100%
    linux简单线程池中的互斥锁
    linux myeclipse hibernate 
    每次EPOLLIN事件都会带一次E
    虚拟机通过NAT与主机共享网络
    Make sure that you are log
    linux240:~ # rpm -qa sftp
    linux怎么进入桌面模式
    Missing Dependency: libQtG
    linux非抢占的模式下,如果时
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |