[Buildroot] Analysis of build failures

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Thu Aug 6 13:58:03 UTC 2015


Guillaume,

On Thu, 6 Aug 2015 15:53:44 +0200, Guillaume GARDET - Oliséo wrote:

> >>           arm |                   c-icap-0.3.5 | NOK | http://autobuild.buildroot.net/results/cb623460de30dd7c4ef3275fe13220c1ca0642a5/
> > c_icap-service.o: In function `load_c_service':
> > service.c:(.text+0x710): undefined reference to `ci_module_load'
> > service.c:(.text+0x720): undefined reference to `ci_module_sym'
> > service.c:(.text+0x774): undefined reference to `ci_module_unload'
> >
> > Unknown, already happened yesterday. Guillaume, can you have a look?
> 
> This is because HAVE_DLFCN_H is not set because dlfcn.h is not provided by the toolchain. But ./os/unix/dlib.c uses dlopen and dlclose functions.
> Apparently, this is missing on uClibc when it is configured as a static-only C library.

The c-icap code seems a bit stupid: it encloses the definition of
ci_module_{load,sym,unload} in #ifdef HAVE_DLFCN_H to not implement
them when dlopen/dlclose are not available (which is good), but
ci_module_{load,sym,unload} are still called unconditionally from the
rest of the c-icap code.

Bottom line: the condition on HAVE_DLFCN_H is useless.

> What would be the best way to fix it? Maybe a "depends on !BR2_STATIC_LIBS" ?

Either fix c-icap, or simpler, make it depends on !BR2_STATIC_LIBS (and
don't forget the corresponding comment).

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com


More information about the buildroot mailing list