[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] Build problem: note: 'xtl_createlogger_stdiostream' is defined in DSO .. so try adding it to the linker command line... libxenctrl.so.4.0: could not read symbols: Invalid operation



On Tue, 2011-03-22 at 17:25 +0000, Ian Campbell wrote:
> On Tue, 2011-03-22 at 17:16 +0000, Konrad Rzeszutek Wilk wrote:
> > On Mon, Mar 21, 2011 at 03:53:25PM +0000, Ian Campbell wrote:
> > > On Mon, 2011-03-21 at 14:53 +0000, Ian Jackson wrote:
> > > > Ian Campbell writes ("Re: [Xen-devel] Build problem: note: 
> > > > 'xtl_createlogger_stdiostream' is defined in DSO .. so try adding it to 
> > > > the linker command line... libxenctrl.so.4.0: could not read symbols: 
> > > > Invalid operation"):
> > > > > xl: link against libxenctrl
> > > > 
> > > > I've applied this, thanks.  Although I don't understand why the build
> > > > failed for Konrad and not me or my test system.
> > > 
> > > Me neither.
> > 
> > I am not sure either. Here is another with todays pull:
> > 
> > gcc    -o xl xl.o xl_cmdimpl.o xl_cmdtable.o libxlutil.so 
> > -L/home/konrad/ssd/xtt/xen-unstable/tools/libxl/../../tools/libxl 
> > -Wl,-rpath-link=/home/konrad/ssd/xtt/xen-unstable/tools/libxl/../../tools/libxc
> >  
> > -Wl,-rpath-link=/home/konrad/ssd/xtt/xen-unstable/tools/libxl/../../tools/xenstore
> >  
> > -Wl,-rpath-link=/home/konrad/ssd/xtt/xen-unstable/tools/libxl/../../tools/blktap2/control
> >  -lxenlight 
> > -L/home/konrad/ssd/xtt/xen-unstable/tools/libxl/../../tools/libxc -lxenctrl
> > /usr/bin/ld: xl_cmdimpl.o: undefined reference to symbol 
> > 'uuid_parse@@UUID_1.0'
> > /usr/bin/ld: note: 'uuid_parse@@UUID_1.0' is defined in DSO 
> > /lib64/libuuid.so.1 so try adding it to the linker command line
> > /lib64/libuuid.so.1: could not read symbols: Invalid operation
> 
> This is due to the use of the uuid library being inlined in the libxl
> headers, so the user of libxl can end up with linking requirements due
> to libxl header internals. I think the right fix is to move these out of
> line like I did with essentially the same thing in blktap2. I'll take a
> look shortly.

Konrad, Jeremy,

Does this help?

Christoph,

Does it work for BSD?

Ian.

# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1300893083 0
# Node ID 83ff83c380c0bfb594e6ac0ccc860cfc60741242
# Parent  26ba6a80310af7c3b360d4b78da8f3ff7188a9e8
tools/libxl: move uuid wrapper functions out of line.

This isolates users of libxenlight from the need to know about the
different OS schemes for UUIDs, in particular the linkage
requirements.

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r 26ba6a80310a -r 83ff83c380c0 tools/libxl/Makefile
--- a/tools/libxl/Makefile      Mon Mar 21 14:41:46 2011 +0000
+++ b/tools/libxl/Makefile      Wed Mar 23 15:11:23 2011 +0000
@@ -34,7 +34,7 @@ LIBXL_OBJS-$(CONFIG_IA64) += libxl_nocpu
 
 LIBXL_OBJS = flexarray.o libxl.o libxl_create.o libxl_dm.o libxl_pci.o \
                        libxl_dom.o libxl_exec.o libxl_xshelp.o libxl_device.o \
-                       libxl_internal.o libxl_utils.o $(LIBXL_OBJS-y)
+                       libxl_internal.o libxl_utils.o libxl_uuid.o 
$(LIBXL_OBJS-y)
 LIBXL_OBJS += _libxl_types.o
 
 $(LIBXL_OBJS): CFLAGS += $(CFLAGS_libxenctrl) $(CFLAGS_libxenguest) 
$(CFLAGS_libxenstore) $(CFLAGS_libblktapctl)
diff -r 26ba6a80310a -r 83ff83c380c0 tools/libxl/libxl_uuid.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/libxl/libxl_uuid.c  Wed Mar 23 15:11:23 2011 +0000
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2008,2010 Citrix Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; version 2.1 only. with the special
+ * exception on linking described in file LICENSE.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+
+#include <libxl_uuid.h>
+
+#if defined(__linux__)
+
+int libxl_uuid_is_nil(libxl_uuid *uuid)
+{
+     return uuid_is_null(uuid->uuid);
+}
+
+void libxl_uuid_generate(libxl_uuid *uuid)
+{
+     uuid_generate(uuid->uuid);
+}
+
+int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
+{
+     return uuid_parse(in, uuid->uuid);
+}
+
+void libxl_uuid_copy(libxl_uuid *dst, libxl_uuid *src)
+{
+     uuid_copy(dst->uuid, src->uuid);
+}
+
+void libxl_uuid_clear(libxl_uuid *uuid)
+{
+     uuid_clear(uuid->uuid);
+}
+
+int libxl_uuid_compare(libxl_uuid *uuid1, libxl_uuid *uuid2)
+{
+     return uuid_compare(uuid1->uuid, uuid2->uuid);
+}
+
+uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
+{
+    return uuid->uuid;
+}
+
+#elif defined(__NetBSD__)
+
+int libxl_uuid_is_nil(libxl_uuid *uuid)
+{
+    uint32_t status;
+    return uuid_is_nil((uuid_t *)uuid->uuid, &status);
+}
+
+void libxl_uuid_generate(libxl_uuid *uuid)
+{
+    uint32_t status;
+    uuid_create((uuid_t *)uuid->uuid, &status);
+    assert(status == uuid_s_ok);
+}
+
+#define LIBXL__UUID_PTRS(uuid) &uuid[0], &uuid[1], &uuid[2], &uuid[3], \
+                               &uuid[4], &uuid[5], &uuid[6], &uuid[7], \
+                               &uuid[8], &uuid[9], &uuid[10],&uuid[11], \
+                               &uuid[12],&uuid[13],&uuid[14],&uuid[15]
+int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
+{
+    if ( sscanf(in, LIBXL_UUID_FMT, LIBXL__UUID_PTRS(uuid->uuid)) != 
sizeof(uuid->uuid) )
+        return -1;
+    return 0;
+}
+#undef LIBXL__UUID_PTRS
+
+void libxl_uuid_copy(libxl_uuid *dst, libxl_uuid *src)
+{
+     memcpy(dst->uuid, src->uuid, sizeof(dst->uuid));
+}
+
+void libxl_uuid_clear(libxl_uuid *uuid)
+{
+     memset(uuid->uuid, 0, sizeof(uuid->uuid));
+}
+
+int libxl_uuid_compare(libxl_uuid *uuid1, libxl_uuid *uuid2)
+{
+     return memcmp(uuid1->uuid, uuid2->uuid, sizeof(uuid1->uuid));
+}
+
+uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
+{
+    return uuid->uuid;
+}
+
+#else
+
+#error "Please update libxl_uuid.c for your OS"
+
+#endif
diff -r 26ba6a80310a -r 83ff83c380c0 tools/libxl/libxl_uuid.h
--- a/tools/libxl/libxl_uuid.h  Mon Mar 21 14:41:46 2011 +0000
+++ b/tools/libxl/libxl_uuid.h  Wed Mar 23 15:11:23 2011 +0000
@@ -24,47 +24,13 @@
 #if defined(__linux__)
 
 #include <uuid/uuid.h>
+#include <stdint.h>
 
 typedef struct {
     uuid_t uuid;
 } libxl_uuid;
 
 #define LIBXL_UUID_BYTES(arg) LIBXL__UUID_BYTES(((uint8_t *)arg.uuid))
-
-static inline int libxl_uuid_is_nil(libxl_uuid *uuid)
-{
-     return uuid_is_null(uuid->uuid);
-}
-
-static inline void libxl_uuid_generate(libxl_uuid *uuid)
-{
-     uuid_generate(uuid->uuid);
-}
-
-static inline int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
-{
-     return uuid_parse(in, uuid->uuid);
-}
-
-static inline void libxl_uuid_copy(libxl_uuid *dst, libxl_uuid *src)
-{
-     uuid_copy(dst->uuid, src->uuid);
-}
-
-static inline void libxl_uuid_clear(libxl_uuid *uuid)
-{
-     uuid_clear(uuid->uuid);
-}
-
-static inline int libxl_uuid_compare(libxl_uuid *uuid1, libxl_uuid *uuid2)
-{
-     return uuid_compare(uuid1->uuid, uuid2->uuid);
-}
-
-static inline uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
-{
-    return uuid->uuid;
-}
 
 #elif defined(__NetBSD__)
 
@@ -80,55 +46,18 @@ typedef struct {
     uint8_t uuid[16];
 } libxl_uuid;
 
-static inline int libxl_uuid_is_nil(libxl_uuid *uuid)
-{
-    uint32_t status;
-    return uuid_is_nil((uuid_t *)uuid->uuid, &status);
-}
-
-static inline void libxl_uuid_generate(libxl_uuid *uuid)
-{
-    uint32_t status;
-    uuid_create((uuid_t *)uuid->uuid, &status);
-    assert(status == uuid_s_ok);
-}
-
-#define LIBXL__UUID_PTRS(uuid) &uuid[0], &uuid[1], &uuid[2], &uuid[3], \
-                               &uuid[4], &uuid[5], &uuid[6], &uuid[7], \
-                               &uuid[8], &uuid[9], &uuid[10],&uuid[11], \
-                               &uuid[12],&uuid[13],&uuid[14],&uuid[15]
-static inline int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
-{
-    if ( sscanf(in, LIBXL_UUID_FMT, LIBXL__UUID_PTRS(uuid->uuid)) != 
sizeof(uuid->uuid) )
-        return -1;
-    return 0;
-}
-#undef LIBXL__UUID_PTRS
-
-static inline void libxl_uuid_copy(libxl_uuid *dst, libxl_uuid *src)
-{
-     memcpy(dst->uuid, src->uuid, sizeof(dst->uuid));
-}
-
-static inline void libxl_uuid_clear(libxl_uuid *uuid)
-{
-     memset(uuid->uuid, 0, sizeof(uuid->uuid));
-}
-
-static inline int libxl_uuid_compare(libxl_uuid *uuid1, libxl_uuid *uuid2)
-{
-     return memcmp(uuid1->uuid, uuid2->uuid, sizeof(uuid1->uuid));
-}
-
-static inline uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
-{
-    return uuid->uuid;
-}
-
 #else
 
 #error "Please update libxl_uuid.h for your OS"
 
 #endif
 
+int libxl_uuid_is_nil(libxl_uuid *uuid);
+void libxl_uuid_generate(libxl_uuid *uuid);
+int libxl_uuid_from_string(libxl_uuid *uuid, const char *in);
+void libxl_uuid_copy(libxl_uuid *dst, libxl_uuid *src);
+void libxl_uuid_clear(libxl_uuid *uuid);
+int libxl_uuid_compare(libxl_uuid *uuid1, libxl_uuid *uuid2);
+uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid);
+
 #endif /* __LIBXL_UUID_H__ */



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.