GTK + for QNXRTP

Hi Everyone.

Does anyone know how to use GTK+ on QNXRTP??

I am trying to set up environment for GTK+ to develop GUI for C application
on QNXRTP. After we installed GTK from a QNX web repository, (
http://www.nexwarecorp.com/repository/) and set it up,
we started creating some simple c programs but realized some problems.

AFter the source code is compiled, we receive such warning error:


#gcc helloworld.c -o helloworld gtk-config --cflags --libs

/usr/ntox86/bin/ld: warning: libc.so.1, needed by /usr/local/lib/libgtk.so,
may
conflict with libc.so.2

We found that the program we created is complied and sort of works, but
doesn’t do what it is supposed to do.
That means, for example, it won’t display the window title ( comes us "
untitled" ) or won’t do a specified event when button is clicked, etc. We
are wondering if this has to do with this warning error.

I checked where the libc.so.1 and libc.so.2 exist and they were both in
/x86/lib and /lib. But, as the current LD_LIBRARY_PATH is showing, it
should be only looking in /lib.

/x86/lib/libc.so.1
/x86/lib/libc.so.2
/lib/libc.so.1
/lib/libc.so.2

#echo $LD_LIBRARY_PATH
/usr/local/qt/lib:/usr/local/lib:/proc/boot:/lib:/usr/lib:/lib/dll:/usr/phot
on/l
ib:/usr/photon/dll:/usr/X11R6/lib:/opt/vame/ive/bin

The sample program source code used was the following, taken from
www.gtk.org.

/* example-start helloworld2 helloworld2.c */

#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>

/* Our new improved callback. The data passed to this function

  • is printed to stdout. */
    void callback( GtkWidget *widget,
    gpointer data )
    {
    g_print (“Hello again - %s was pressed\n”, (char *) data);
    }

/* another callback */
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit();
return(FALSE);
}

int main( int argc,
char argv[] )
{
/
GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *button;
GtkWidget *box1;

/* This is called in all GTK applications. Arguments are parsed

  • from the command line and are returned to the application. */
    gtk_init (&argc, &argv);

/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* This is a new call, which just sets the title of our

  • new window to “Hello Buttons!” */
    gtk_window_set_title (GTK_WINDOW (window), “Hello Buttons!”);

/* Here we just set a handler for delete_event that immediately

  • exits GTK. */
    gtk_signal_connect (GTK_OBJECT (window), “delete_event”,
    GTK_SIGNAL_FUNC (delete_event), NULL);

/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 5);

/* We create a box to pack widgets into. This is described in detail

  • in the “packing” section. The box is not really visible, it
  • is just used as a tool to arrange widgets. */
    box1 = gtk_hbox_new(FALSE, 0);

/* Put the box into the main window. */
gtk_container_add (GTK_CONTAINER (window), box1);

/* Creates a new button with the label “Button 1”. */
button = gtk_button_new_with_label (“Button 1”);

/* Now when the button is clicked, we call the “callback” function

  • with a pointer to “button 1” as its argument */
    gtk_signal_connect (GTK_OBJECT (button), “clicked”,
    GTK_SIGNAL_FUNC (callback), (gpointer) “button 1”);

/* Instead of gtk_container_add, we pack this button into the invisible

  • box, which has been packed into the window. */
    gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);

/* Always remember this step, this tells GTK that our preparation for

  • this button is complete, and it can now be displayed. */
    gtk_widget_show(button);

/* Do these same steps again to create a second button */
button = gtk_button_new_with_label (“Button 2”);

/* Call the same callback function with a different argument,

  • passing a pointer to “button 2” instead. */
    gtk_signal_connect (GTK_OBJECT (button), “clicked”,
    GTK_SIGNAL_FUNC (callback), (gpointer) “button 2”);

gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);

/* The order in which we show the buttons is not really important, but I

  • recommend showing the window last, so it all pops up at once. */
    gtk_widget_show(button);

gtk_widget_show(box1);

gtk_widget_show (window);

/* Rest in gtk_main and wait for the fun to begin! */
gtk_main ();

return(0);
}
/* example-end */




Thanks so much for any help!!

Eri

Eri Makimura <emakimura@aus.telusa.com> wrote:

Hi Everyone.

Hello Eri,

Does anyone know how to use GTK+ on QNXRTP??

I am trying to set up environment for GTK+ to develop GUI for C application
on QNXRTP. After we installed GTK from a QNX web repository, (
http://www.nexwarecorp.com/repository/> ) and set it up,
we started creating some simple c programs but realized some problems.

AFter the source code is compiled, w
e receive such warning error:



#gcc helloworld.c -o helloworld gtk-config --cflags --libs

/usr/ntox86/bin/ld: warning: libc.so.1, needed by /usr/local/lib/libgtk.so,
may
conflict with libc.so.2

We found that the program we created is complied and sort of works, but
doesn’t do what it is supposed to do.
That means, for example, it won’t display the window title ( comes us "
untitled" ) or won’t do a specified event when button is clicked, etc. We
are wondering if this has to do with this warning error.

I don’t know much about GTK+, but the problem you are seeing, might be
related to the fact, that GTK+ was linked against Non-Dinkum c lib.
You are probably using 6.1.0 system which uses Dinkum libs, as well it
contains the libc.so.1 (old gcc c lib). The short answer is the above
package was made for QNX RTP 6.0.x.

I checked where the libc.so.1 and libc.so.2 exist and they were both in
/x86/lib and /lib. But, as the current LD_LIBRARY_PATH is showing, it
should be only looking in /lib.

/x86/lib/libc.so.1
/x86/lib/libc.so.2
/lib/libc.so.1
/lib/libc.so.2

#echo $LD_LIBRARY_PATH
/usr/local/qt/lib:/usr/local/lib:/proc/boot:/lib:/usr/lib:/lib/dll:/usr/phot
on/l
ib:/usr/photon/dll:/usr/X11R6/lib:/opt/vame/ive/bin

To check what shared libs are loaded with your program you can
‘export DL_DEBUG=1’ and then run your program, or you can do
‘objdump -x YOUR_PROGRAM | less’

Regards,

Marcin

The sample program source code used was the following, taken from
www.gtk.org> .

/* example-start helloworld2 helloworld2.c */

#include <gtk/gtk.h
#include <stdio.h
#include <stdlib.h

/* Our new improved callback. The data passed to this function

  • is printed to stdout. */
    void callback( GtkWidget *widget,
    gpointer data )
    {
    g_print (“Hello again - %s was pressed\n”, (char *) data);
    }

/* another callback */
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit();
return(FALSE);
}

int main( int argc,
char argv[] )
{
/
GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *button;
GtkWidget *box1;

/* This is called in all GTK applications. Arguments are parsed

  • from the command line and are returned to the application. */
    gtk_init (&argc, &argv);

/* Create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* This is a new call, which just sets the title of our

  • new window to “Hello Buttons!” */
    gtk_window_set_title (GTK_WINDOW (window), “Hello Buttons!”);

/* Here we just set a handler for delete_event that immediately

  • exits GTK. */
    gtk_signal_connect (GTK_OBJECT (window), “delete_event”,
    GTK_SIGNAL_FUNC (delete_event), NULL);

/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 5);

/* We create a box to pack widgets into. This is described in detail

  • in the “packing” section. The box is not really visible, it
  • is just used as a tool to arrange widgets. */
    box1 = gtk_hbox_new(FALSE, 0);

/* Put the box into the main window. */
gtk_container_add (GTK_CONTAINER (window), box1);

/* Creates a new button with the label “Button 1”. */
button = gtk_button_new_with_label (“Button 1”);

/* Now when the button is clicked, we call the “callback” function

  • with a pointer to “button 1” as its argument */
    gtk_signal_connect (GTK_OBJECT (button), “clicked”,
    GTK_SIGNAL_FUNC (callback), (gpointer) “button 1”);

/* Instead of gtk_container_add, we pack this button into the invisible

  • box, which has been packed into the window. */
    gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);

/* Always remember this step, this tells GTK that our preparation for

  • this button is complete, and it can now be displayed. */
    gtk_widget_show(button);

/* Do these same steps again to create a second button */
button = gtk_button_new_with_label (“Button 2”);

/* Call the same callback function with a different argument,

  • passing a pointer to “button 2” instead. */
    gtk_signal_connect (GTK_OBJECT (button), “clicked”,
    GTK_SIGNAL_FUNC (callback), (gpointer) “button 2”);

gtk_box_pack_start(GTK_BOX(box1), button, TRUE, TRUE, 0);

/* The order in which we show the buttons is not really important, but I

  • recommend showing the window last, so it all pops up at once. */
    gtk_widget_show(button);

gtk_widget_show(box1);

gtk_widget_show (window);

/* Rest in gtk_main and wait for the fun to begin! */
gtk_main ();

return(0);
}
/* example-end */




Thanks so much for any help!!

Eri