[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] tools/libxl: fix compilation and link errors on NetBSD
On 14.05.13 18:34, Ian Campbell wrote: > On Tue, 2013-05-14 at 15:51 +0100, Christoph Egger wrote: >> commit cad172d7b88bd443c81d865051297875ce2551bc >> Author: Christoph Egger <chegger@xxxxxxxxx> >> Date: Thu Feb 7 14:42:29 2013 +0000 >> >> tools/libxl: fix compilation and link errors on NetBSD >> >> - Fix testidl link error that libyajl is not found >> - Make linking of xl and testidl consistent >> - fix error: array subscript has type 'char' >> >> Signed-off-by: Christoph Egger <chegger@xxxxxxxxx> >> Reviewed-by: Matthew Wilson <msw@xxxxxxxxx> >> >> diff --git a/tools/Rules.mk b/tools/Rules.mk >> index 3f03a31..4067955 100644 >> --- a/tools/Rules.mk >> +++ b/tools/Rules.mk >> @@ -56,7 +56,7 @@ SHLIB_libblktapctl = >> endif >> >> CFLAGS_libxenlight = -I$(XEN_XENLIGHT) $(CFLAGS_libxenctrl) >> $(CFLAGS_xeninclude) >> -LDLIBS_libxenlight = $(XEN_XENLIGHT)/libxenlight.so $(SHLIB_libxenctrl) >> $(SHLIB_libxenstore) $(SHLIB_libblktapctl) >> +LDLIBS_libxenlight = $(XEN_XENLIGHT)/libxenlight.so $(APPEND_LDFLAGS) >> -lyajl $(SHLIB_libxenctrl) $(SHLIB_libxenstore) $(SHLIB_libblktapctl) > > I don't know what compile/link failure you are seeing on NetBSD but I'm > afraid I don't agree this is a correct fix. I see the following link failure: gcc -pthread -o testidl testidl.o libxlutil.so /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so -Wl,-rpath-link=/home/chegger/xen.git/tools/libxl/../../tools/libxc -Wl,-rpath-link=/home/chegger/xen.git/tools/libxl/../../tools/xenstore /home/chegger/xen.git/tools/libxl/../../tools/libxc/libxenctrl.so -L/usr/pkg/lib ld: warning: libyajl.so.2, needed by /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so, not found (try using -rpath or -rpath-link) /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_parse' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_complete_parse' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_null' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_array_open' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_number' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_string' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_map_close' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_get_buf' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_double' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_config' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_free' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_alloc' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_array_close' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_map_open' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_get_error' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_free_error' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_integer' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_alloc' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_free' /home/chegger/xen.git/tools/libxl/../../tools/libxl/libxenlight.so: undefined reference to `yajl_gen_bool' gmake[3]: *** [testidl] Error 1 gmake[3]: Leaving directory `/home/chegger/xen.git/tools/libxl' gmake[2]: *** [subdir-install-libxl] Error 2 gmake[2]: Leaving directory `/home/chegger/xen.git/tools' gmake[1]: *** [subdirs-install] Error 2 gmake[1]: Leaving directory `/home/chegger/xen.git/tools' gmake: *** [install-tools] Error 2 > > This variable specifies the linker line which an application linking > libxl is required to use. Unless that application is using yajl itself > then it doesn't need -lyajl since the library is correctly linked to the > libyajl itself (via ELF DT_NEEDED). > > If an application does use yajl itself (as xl does) then it should also > link against the library itself, which is what xl does (or did before > you changed it below), but it should not get this from > LDLIBS_libxenlight. > > testidl.c doesn't use yajl directly, so it shouldn't need to link > against libjyajl itself directly AFAICT. The fact that testidl and xl > use different libraries is exactly the reason why their link lines are > "inconsistent". > > With GNU ld this relates the the --as-needed option, perhaps you need to > find similar functionality for your linker? > > Also APPEND_LDFLAGS should be in the final app link only, no need to add > it here. > >> SHLIB_libxenlight = -Wl,-rpath-link=$(XEN_XENLIGHT) >> >> CFLAGS += -D__XEN_TOOLS__ >> diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile >> index cf214bb..c65c11e 100644 >> --- a/tools/libxl/Makefile >> +++ b/tools/libxl/Makefile >> @@ -189,7 +189,7 @@ libxlutil.a: $(LIBXLU_OBJS) >> $(AR) rcs libxlutil.a $^ >> >> xl: $(XL_OBJS) libxlutil.so libxenlight.so >> - $(CC) $(LDFLAGS) -o $@ $(XL_OBJS) libxlutil.so $(LDLIBS_libxenlight) >> $(LDLIBS_libxenctrl) -lyajl $(APPEND_LDFLAGS) >> + $(CC) $(LDFLAGS) -o $@ $(XL_OBJS) libxlutil.so $(LDLIBS_libxenlight) >> $(LDLIBS_libxenctrl) $(APPEND_LDFLAGS) > > As explained above you shouldn't be changing this. I suppose it might be > possible that reordering the yajl here is a correct fix for your issue, > but having not seen it I can't really say. This change is just that -lyajl is not redundant here. Adding -lyajl to testidl like to xl w/o my patch doesn't work for me. I see the same error as above. > >> libxl-save-helper: $(SAVE_HELPER_OBJS) libxenlight.so >> $(CC) $(LDFLAGS) -o $@ $(SAVE_HELPER_OBJS) $(LDLIBS_libxenctrl) >> $(LDLIBS_libxenguest) $(APPEND_LDFLAGS) >> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c >> index 35da71c..0c039b1 100644 >> --- a/tools/libxl/libxl_utils.c >> +++ b/tools/libxl/libxl_utils.c >> @@ -95,7 +95,7 @@ int libxl_domain_qualifier_to_domid(libxl_ctx *ctx, const >> char *name, >> { >> int i, rv; >> for (i=0; name[i]; i++) { >> - if (!isdigit(name[i])) { >> + if (!isdigit((unigned char)name[i])) { > > You very obviously never even compile tested this. Bah. I need to find a better way to transfer patches from my development machine through the internal review process to my mail client. On my development machine I have the missing 's'. I just checked. Christoph _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |