Newbie trying to compile an example program

Juan Carlos Castro y Castro jcastro at
Tue Jun 6 09:43:28 PDT 2006

I got the example program from (seen below), added 
an #include <dbus/dbus-glib.h> and tried to compile. I got "undefined 
symbol" on DBUS_GERROR_REMOTE_EXCEPTION but worked around that. But now 
I get the following errors while linking. I'm using Fedora 5 and the 
dbus from its repository (dbus-0.33-3.fc4.1). I have the devel packages 
installed too, both for it and for glib.

gcc -ldbus-1 -ldbus-glib-1 -lglib-2.0 -I/usr/include/dbus-1.0 
-I/usr/lib/dbus-1.0/include -I/usr/include/glib-2.0 
-I/usr/lib/glib-2.0/include -o dbustest dbustest.c

dbustest.c: In function 'main':
dbustest.c:35: warning: implicit declaration of function 'dbus_g_proxy_call'
dbustest.c:41: warning: implicit declaration of function 
dbustest.c:42: warning: format '%s' expects type 'char *', but argument 
2 has type 'int'
/tmp/cccwlQMO.o(.text+0xb8): In function `main':
dbustest.c: undefined reference to `dbus_g_proxy_call'
/tmp/cccwlQMO.o(.text+0xe5):dbustest.c: undefined reference to 
collect2: ld returned 1 exit status

I'm doing something stupid, I'm sure. Question is, what?

#include <stdlib.h>
#include <dbus/dbus-glib.h>

main (int argc, char **argv)
  DBusGConnection *connection;
  GError *error;
  DBusGProxy *proxy;
  char **name_list;
  char **name_list_ptr;
  g_type_init ();

  error = NULL;
  connection = dbus_g_bus_get (DBUS_BUS_SESSION,
  if (connection == NULL)
      g_printerr ("Failed to open connection to bus: %s\n",
      g_error_free (error);
      exit (1);

  /* Create a proxy object for the "bus driver" (name 
"org.freedesktop.DBus") */
  proxy = dbus_g_proxy_new_for_name (connection,

  /* Call ListNames method, wait for reply */
  error = NULL;
  if (!dbus_g_proxy_call (proxy, "ListNames", &error, G_TYPE_INVALID,
                          G_TYPE_STRV, &name_list, G_TYPE_INVALID))
      /* Just do demonstrate remote exceptions versus regular GError */
      if (error->domain == DBUS_GERROR) /* && error->code == 
        g_printerr ("Caught remote method exception %s: %s (#%d)",
                dbus_g_error_get_name (error),
                error->message, error->code);
        g_printerr ("Error: %s\n", error->message);
      g_error_free (error);
      exit (1);

  /* Print the results */
  g_print ("Names on the message bus:\n");
  for (name_list_ptr = name_list; *name_list_ptr; name_list_ptr++)
      g_print ("  %s\n", *name_list_ptr);
  g_strfreev (name_list);

  g_object_unref (proxy);

  return 0;

More information about the dbus mailing list