Re: [PUG] C Programmierhilfe für Anfänger [segmention fault] gesucht

2006-02-21 Diskussionsfäden Chris Ruehl

Bernhard Guillon wrote:


Hallo,
ich versuche mich gerade ein bisschen mit C. Leider bringt der 
Compiler mit  -W -Wall ein [segmention fault]. Ich habe wohl irgendwo 
was falsch gemacht. Ich habe versucht ein bestehendes Programm um die 
XGetInputFocus() Funktion zu erweitern. Dabei muss ich etwas übersehen 
haben. Ich poste einfach mal den Quelltext und den Error:


#include stdio.h
#include stdlib.h
#include X11/Xlib.h
#include X11/Xutil.h
#include string.h

int main (int argc, char *argv[]) {
 Display *display;
 Window *focus_return;
 int *revert_to_return;
 int i;

 if (argc3) {
   printf(usage: ./sendkey key1 key2 key3 etc.\n\n);
   return(1);
 }


if ((display = XOpenDisplay(NULL)) == NULL)
{
   printf(Unable to open display\n);
   return 1;
}

XGetInputFocus(display, focus_return,revert_to_return);

 for (i=3; iargc; ++i) {
   XEvent ev;
   KeySym key;
   ev.xkey.type=KeyPress;
   ev.xkey.window=(int)focus_return;
   ev.xkey.root=ev.xkey.subwindow=None;
   ev.xkey.time=0;
   ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
   ev.xkey.state=0;
   key=XStringToKeysym(argv[i]);
   ev.xkey.keycode=XKeysymToKeycode(display, key);
   ev.xkey.same_screen=True;
   XSendEvent(display, (int)focus_return, True, KeyPressMask, ev);
   ev.type=KeyRelease;
   XSendEvent(display, (int)focus_return, True, KeyReleaseMask, ev);
 }

 XCloseDisplay(display);

 return(0);
}

Error:

collect2: ld terminated with signal 11 [Segmentation fault]
sendkey(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.rodata+0x0):../sysdeps/i386/elf/start.S:65: 
first defined here

sendkey(.data+0x4): In function `__data_start':
: multiple definition of `__dso_handle'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/crtbegin.o(.data+0x0): 
first defined here

sendkey(.init+0x0): In function `_init':
/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:35: multiple definition 
of `_init'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crti.o(.init+0x0):/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:12: 
first defined here

sendkey(.text+0x0): In function `_start':
../sysdeps/i386/elf/start.S:65: multiple definition of `_start'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.text+0x0):../sysdeps/i386/elf/start.S:65: 
first defined here

sendkey(.text+0xc4): In function `main':
: multiple definition of `main'
/tmp/cc6jfdFj.o(.text+0x0): first defined here
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../../i486-slackware-linux/bin/ld: 
Warning: size of symbol `main' changed from 367 in /tmp/cc6jfdFj.o to 
344 in sendkey

sendkey(.fini+0x0): In function `_fini':
/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:51: multiple definition 
of `_fini'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crti.o(.fini+0x0): 
first defined here

sendkey(*ABS*+0x8049974): In function `__init_array_start':
send.c: multiple definition of `_GLOBAL_OFFSET_TABLE_'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.got.plt+0x0):../sysdeps/i386/elf/start.S:65: 
first defined here

sendkey(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.rodata+0x4):../sysdeps/i386/elf/start.S:71: 
first defined here

sendkey(.data+0x0): In function `__data_start':
: multiple definition of `__data_start'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.data+0x0):../sysdeps/i386/elf/start.S:65: 
first defined here
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.dynamic+0x0):../sysdeps/i386/elf/start.S:65: 
multiple definition of `_DYNAMIC'


MfG
Bernhard




Hi,
versuch mal:
gcc -c -g -Wall myX.c
gcc -o myX -L/usr/lib/X11 -lX myX.o

wobei myX.c dein natürlich dein Filename sein muss



--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] C Programmierhilfe für Anfänger [segmention fault] gesucht

2006-02-21 Diskussionsfäden Bernhard Guillon

Chris Ruehl wrote:



Hi,
versuch mal:
gcc -c -g -Wall myX.c
gcc -o myX -L/usr/lib/X11 -lX myX.o

wobei myX.c dein natürlich dein Filename sein muss




Hallo,
danke erst mal an alle!
Ich habe das Problem mittlerweile gelöst.
Die Ausgabe stammte von einem Tippfehler und der Segfault des Programmes 
davon, dass ich das mit der Typenumwandlung der Pointer genau falsch rum 
gemacht habe. Ich habe die Pointer zu int gemacht statt int zu Pointern ;).
Also das Programm funktioniert nun super, nur leider habe ich nicht 
bedacht, dass mir das aktive Fenster nichts bringt, da das ja das 
Fenster ist von dem aus ich den Befehl absetze *g.
Weiß jemand vieleicht wie ich das nächstmögliche Fenster mit 
Eingabemöglichkeit ermitteln kann?

Oder wie würdet ihr das Lösen?
Ich will später mal ein Virtual-Keyboard mit der edje lib von 
Enlightenment schreiben, damit man dies in entrance (Enlightenment 
Loginmanager) einbinden kann um sich auf dem SIMpad/mobilen Geräten mit 
Stifteingabe anmelden zu können.

MfG
Bernhard

--
Spielt http://www.zwischenwelt.org!

--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


[PUG] C Programmierhilfe für Anfänger [segmention fault] gesucht

2006-02-20 Diskussionsfäden Bernhard Guillon

Hallo,
ich versuche mich gerade ein bisschen mit C. Leider bringt der Compiler 
mit  -W -Wall ein [segmention fault]. Ich habe wohl irgendwo was falsch 
gemacht. Ich habe versucht ein bestehendes Programm um die 
XGetInputFocus() Funktion zu erweitern. Dabei muss ich etwas übersehen 
haben. Ich poste einfach mal den Quelltext und den Error:


#include stdio.h
#include stdlib.h
#include X11/Xlib.h
#include X11/Xutil.h
#include string.h

int main (int argc, char *argv[]) {
 Display *display;
 Window *focus_return;
 int *revert_to_return;
 int i;

 if (argc3) {
   printf(usage: ./sendkey key1 key2 key3 etc.\n\n);
   return(1);
 }


if ((display = XOpenDisplay(NULL)) == NULL)
{
   printf(Unable to open display\n);
   return 1;
}

XGetInputFocus(display, focus_return,revert_to_return);

 for (i=3; iargc; ++i) {
   XEvent ev;
   KeySym key;
   ev.xkey.type=KeyPress;
   ev.xkey.window=(int)focus_return;
   ev.xkey.root=ev.xkey.subwindow=None;
   ev.xkey.time=0;
   ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
   ev.xkey.state=0;
   key=XStringToKeysym(argv[i]);
   ev.xkey.keycode=XKeysymToKeycode(display, key);
   ev.xkey.same_screen=True;
   XSendEvent(display, (int)focus_return, True, KeyPressMask, ev);
   ev.type=KeyRelease;
   XSendEvent(display, (int)focus_return, True, KeyReleaseMask, ev);
 }

 XCloseDisplay(display);

 return(0);
}

Error:

collect2: ld terminated with signal 11 [Segmentation fault]
sendkey(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.rodata+0x0):../sysdeps/i386/elf/start.S:65:
 first defined here
sendkey(.data+0x4): In function `__data_start':
: multiple definition of `__dso_handle'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/crtbegin.o(.data+0x0): first 
defined here
sendkey(.init+0x0): In function `_init':
/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:35: multiple definition of `_init'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crti.o(.init+0x0):/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:12:
 first defined here
sendkey(.text+0x0): In function `_start':
../sysdeps/i386/elf/start.S:65: multiple definition of `_start'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.text+0x0):../sysdeps/i386/elf/start.S:65:
 first defined here
sendkey(.text+0xc4): In function `main':
: multiple definition of `main'
/tmp/cc6jfdFj.o(.text+0x0): first defined here
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../../i486-slackware-linux/bin/ld:
 Warning: size of symbol `main' changed from 367 in /tmp/cc6jfdFj.o to 344 in 
sendkey
sendkey(.fini+0x0): In function `_fini':
/tmp/glibc-2.3.5/build-glibc-2.3.5/csu/crti.S:51: multiple definition of `_fini'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crti.o(.fini+0x0): first 
defined here
sendkey(*ABS*+0x8049974): In function `__init_array_start':
send.c: multiple definition of `_GLOBAL_OFFSET_TABLE_'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.got.plt+0x0):../sysdeps/i386/elf/start.S:65:
 first defined here
sendkey(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.rodata+0x4):../sysdeps/i386/elf/start.S:71:
 first defined here
sendkey(.data+0x0): In function `__data_start':
: multiple definition of `__data_start'
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.data+0x0):../sysdeps/i386/elf/start.S:65:
 first defined here
/usr/lib/gcc-lib/i486-slackware-linux/3.3.6/../../../crt1.o(.dynamic+0x0):../sysdeps/i386/elf/start.S:65:
 multiple definition of `_DYNAMIC'

MfG
Bernhard


--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] C Programmierhilfe für Anfänger [segmention fault] gesucht

2006-02-20 Diskussionsfäden Bernhard Guillon
Ich weiß nicht warum die Mail erst heute durch kam. Ich hatte die glaube 
ich gestern oder vorgestern geschrieben.

Die Lösung ist:
#include stdio.h
#include stdlib.h
#include X11/Xlib.h
#include X11/Xutil.h
#include string.h

int main (int argc, char *argv[]) {
 Display *display;
 Window focus_return;
 int revert_to_return;
 int i;

 if (argc3) {
   printf(usage: ./sendkey key1 key2 key3 etc.\n\n);
   return(1);
 }


if ((display = XOpenDisplay(NULL)) == NULL)
{
   printf(Unable to open display\n);
   return 1;
}

XGetInputFocus(display, focus_return,revert_to_return);

 for (i=3; iargc; ++i) {
   XEvent ev;
   KeySym key;
   ev.xkey.type=KeyPress;
   ev.xkey.window=focus_return;
   ev.xkey.root=ev.xkey.subwindow=None;
   ev.xkey.time=0;
   ev.xkey.x=ev.xkey.y=ev.xkey.x_root=ev.xkey.y_root=0;
   ev.xkey.state=0;
   key=XStringToKeysym(argv[i]);
   ev.xkey.keycode=XKeysymToKeycode(display, key);
   ev.xkey.same_screen=True;
   XSendEvent(display, focus_return, True, KeyPressMask, ev);
   ev.type=KeyRelease;
   XSendEvent(display, focus_return, True, KeyReleaseMask, ev);
 }

 XCloseDisplay(display);

 return(0);
}

MfG
Bernhard
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org


Re: [PUG] C Programmierhilfe für Anfänger [segmention fault] gesucht

2006-02-20 Diskussionsfäden Maximilian

Bernhard Guillon schrieb:

Hallo,
ich versuche mich gerade ein bisschen mit C. Leider bringt der Compiler 
mit  -W -Wall ein [segmention fault]. Ich habe wohl irgendwo was falsch 
gemacht.
Ohne mich jetzt näher mit dem Quelltext/dem Fehler beschäftigt zu haben 
(*nichtgut*)

äußere ich mal folgende Vermutung:
du hast den gcc aufgerufen wie folgt:
gcc -W -Wall irgendwas.c

allerdings ist da das -W irgendwie doppelt reingerutscht. Weil -W ist 
die option, das argument ist all, also müsste es doch heißen

gcc -Wall irgendwas.c

ob das jetzt direkt weiterhilft weiß ich nicht, probier es doch einfach 
mal aus

gruß
maximilian
--

PUG - Penguin User Group Wiesbaden - http://www.pug.org