undefined reference to `bb_makedev'

Denis Vlasenko vda.linux at googlemail.com
Sat Dec 9 18:34:43 PST 2006


On Sunday 03 December 2006 16:32, Yuwen Dai wrote:
> Dear all,
> 
> When I built the current svn source, I got this error:
> 
>   LINK    busybox_unstripped
> /usr/bin/ld: Warning: gc-sections option ignored

Hmm... What is your arch? Version of gcc and ld?

> archival/libunarchive/lib.a(get_header_cpio.o)(.text.get_header_cpio+0x321):
> In function `get_header_cpio':
> : undefined reference to `bb_makedev'
> 
> 
> I saw bb_makedev is defined in libbb/makedev.c surrounded by #ifdef
> __GLIBC__, should I define this macro?

No. You should investigate how come get_header_cpio.c
managed to reference bb_makedev here:
        file_header->device = makedev(major, minor);


Because as far as I can see, makedev is mapped to bb_makedev
AND bb_makedev is defined under the very same #ifdef:

include/libbb.h:

#ifdef __GLIBC__
/* At least glibc has horrendously large inline for this, so wrap it */
extern unsigned long long bb_makedev(unsigned int major, unsigned int minor);
#undef makedev
#define makedev(a,b) bb_makedev(a,b)
#endif

libbb/makedev.c:

#ifdef __GLIBC__
/* At least glibc has horrendously large inline for this, so wrap it */
/* uclibc people please check - do we need "&& !__UCLIBC__" above? */
unsigned long long bb_makedev(unsigned int major, unsigned int minor)
{
        return makedev(major, minor);
}
#endif

So, how come __GLIBC__ was defined in get_header_cpio.c
and _wasn't_ defined in makedev.c?? Or maybe makedev.o is not linked in?
--
vda


More information about the busybox mailing list