Forum: PC-Programmierung linux X11/Xlib.h


von Marco Oklitz (Gast)


Lesenswert?

Mahlzeit !

Hab mal wieder ein Problem bei dem ich nicht weiterkomme !

ich möchte gerne diesen Code compilieren:
1
#include <stdio.h>
2
#include <X11/Xlib.h>
3
 
4
int main()
5
{
6
  Display *d;
7
  Window inwin;      /* root window the pointer is in */
8
  Window inchildwin; /* child win the pointer is in */
9
  int rootx, rooty; /* relative to the "root" window; we are not interested in these,
10
                       but we can't pass NULL */
11
  int childx, childy;  /* the values we are interested in */
12
  Atom atom_type_prop; /* not interested */
13
  int actual_format;   /* should be 32 after the call */
14
  unsigned int mask;   /* status of the buttons */
15
  unsigned long n_items, bytes_after_ret;
16
  Window *props; /* since we are interested just in the first value, which is
17
        a Window id */
18
 
19
  /* default DISPLAY */
20
  d = XOpenDisplay(NULL); 
21
 
22
  /* ask for active window (no error check); the client must be freedesktop
23
     compliant */
24
  (void)XGetWindowProperty(d, DefaultRootWindow(d),
25
         XInternAtom(d, "_NET_ACTIVE_WINDOW", True),
26
         0, 1, False, AnyPropertyType,
27
         &atom_type_prop, &actual_format,
28
         &n_items, &bytes_after_ret, (unsigned char**)&props);
29
 
30
  XQueryPointer(d, props[0], &inwin,  &inchildwin,
31
    &rootx, &rooty, &childx, &childy, &mask);
32
  printf("relative to active window: %d,%d\n", childx, childy);
33
 
34
  XFree(props);           /* free mem */
35
  (void)XCloseDisplay(d); /* and close the display */
36
  return 0;
37
}

der is original von http://rosettacode.org/wiki/Get_mouse_position#C

wenn ich den mit
gcc -L/usr/lib -lX11 -o main main.c

funktioniert es wunderbar !

kopiere ich den Quelltext 1:1 nach Code::Blocks
kommt dauernd
 undefined reference to 'XOpenDisplay'
 undefined reference to 'XInternAtom'
 ....

ich hab schon überall in den einstellungen nachgeschaut aber nix 
gefunden.

ich denke aber es is ne einstellungssache denn wenn ichs mit hand 
kompiliere klappts ja !

Hat vielleicht jemand ne idee welche einstellungen ich ändern muß ?

gruß marco

von Klaus W. (mfgkw)


Lesenswert?

Ich kenne jetzt Code::Blocks nicht näher, aber du wirst dem Projekt 
irgendwie noch die Datei /usr/lib/libX11.so oder /usr/lib/libX11.a
hinzufügen müssen (oder bei den Linkeroptionen entsprechend angeben).

von Georg A. (Gast)


Lesenswert?

Das -lX11 fehlt beim gcc-Aufruf aus Codeblocks. Ich habe das noch 
Codeblocks noch nie probiert, sowas sollte sich aber in den 
Linkersettings einstellen lassen...

von Marco Oklitz (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Ich kenne jetzt Code::Blocks nicht näher, aber du wirst dem Projekt
> irgendwie noch die Datei /usr/lib/libX11.so oder /usr/lib/libX11.a
> hinzufügen müssen (oder bei den Linkeroptionen entsprechend angeben).

Yo !

hab /usr/lib/libX11.so bei den linker optionen hinzugefügt
jetzt klappts

super danke !

mfg marco

von Andreas B. (Gast)


Lesenswert?

Marco Oklitz schrieb:
> wenn ich den mit
> gcc -L/usr/lib -lX11 -o main main.c

Libraries immer hinter die Objektdateien! Die braucht der Linker nur zu 
berücksichtigen, soweit sie Referenzen auf Symbole auflösen und ganz am 
Anfang der Zeile gibt es noch keine Referenzen.

Das hat nur funktioniert, weil die libX11 eine Shared Library ist und 
die auf jeden Fall gelinkt werden, wenn sie beim Linken angegeben 
werden. Außer Linker-Flag --as-needed wird zum Default.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.