当前位置: 技术问答>linux和unix
报错“collect2: ld returned 1 exit status”
来源: 互联网 发布时间:2016-06-08
本文导语: 一直都是正常的,今天编译的时候就错,如下: ====================================================================== public.o(.bss+0x0): In function `get_date': /home/opt/src/public.c:282: multiple definition of `errno_r' /tmp/ccf9Volt.o(.bss+0x130):/home/opt/...
一直都是正常的,今天编译的时候就错,如下:
======================================================================
public.o(.bss+0x0): In function `get_date':
/home/opt/src/public.c:282: multiple definition of `errno_r'
/tmp/ccf9Volt.o(.bss+0x130):/home/opt/src/BatchMain.c:884: first defined here
collect2: ld returned 1 exit status
make: *** [BatchMain] Error 1
======================================================================
其中,get_date是public中的第一个函数。
报错说errno_r变量重复定义了。在BatchMain.c:884第一次定义,问题是我变量errno_r根本就没有定义过。
所以我怀疑可能是编译环境出问题了,请问如何查找?thx
======================================================================
public.o(.bss+0x0): In function `get_date':
/home/opt/src/public.c:282: multiple definition of `errno_r'
/tmp/ccf9Volt.o(.bss+0x130):/home/opt/src/BatchMain.c:884: first defined here
collect2: ld returned 1 exit status
make: *** [BatchMain] Error 1
======================================================================
其中,get_date是public中的第一个函数。
报错说errno_r变量重复定义了。在BatchMain.c:884第一次定义,问题是我变量errno_r根本就没有定义过。
所以我怀疑可能是编译环境出问题了,请问如何查找?thx
|
看看你的头文件,,,
一般是你的头文件里面重复定义了
看样子可能不是重包含,,而确实是在两个地方定义的
一般是你的头文件里面重复定义了
看样子可能不是重包含,,而确实是在两个地方定义的
|
问题的关键应该就是头文件中的变量 errno_r 定义。一般来说,头文件应该这样:
extern int errno_r;
然后只能在其中一个 c 文件中定义其变量:
int errno_r;
|
头文件里有#ifndef
#define
#endif
这些宏么?
#define
#endif
这些宏么?
|
.h 只是声明而不是定义
初始化必须要有内存分配给这个变量
你在.c下就可以完成定义
初始化必须要有内存分配给这个变量
你在.c下就可以完成定义