[Linux/X11] Compiler fehler

Hiho,
Ich setzte mich zur Zeit gerade mit xlib auseinander … besser: ich möchte mich mit xlib auseinandersetzen, werde aber durch einen immerwährenden Compiler-Fehler ausgebremst

Compiling: gcc -o test xpoints.c

Fehler:

/tmp/cc6ymrs4.o: In function ‚main‘:
/tmp/cc6ymrs4.o(.text+0x27): undefined reference to ‚XOpenDisplay‘
/tmp/cc6ymrs4.o(.text+0xe0): undefined reference to ‚XCreateSimpleWindow‘
/tmp/cc6ymrs4.o(.text+0x132): undefined reference to ‚XAllocNamedColor‘
/tmp/cc6ymrs4.o(.text+0x166): undefined reference to ‚XCreateGC‘
/tmp/cc6ymrs4.o(.text+0x185): undefined reference to ‚XSelectInput‘
/tmp/cc6ymrs4.o(.text+0x198): undefined reference to ‚XMapWindow‘
/tmp/cc6ymrs4.o(.text+0x1b4): undefined reference to ‚XWindowEvent‘
/tmp/cc6ymrs4.o(.text+0x1ec): undefined reference to ‚XClearWindow‘
/tmp/cc6ymrs4.o(.text+0x210): undefined reference to ‚XDrawPoint‘
collect2: ld returned 1 exit status

Source:

#include
#include

main(argc,argv)
int argc;
char **argv;
{
Display *display;
Window root, window;
long fgcolor, bgcolor;
int screen, pointx, pointy;
long eventmask = ButtonPressMask|ExposureMask|KeyPressMask;
XEvent event;
XGCValues gcval;
GC draw;
Colormap cmap;
XColor color, ignore;
char *colorname = „red“;

if (!(display = XOpenDisplay(argv[1]))) {
perror(„XOpenDisplay“);
exit(1);
}

root = RootWindow(display,screen = DefaultScreen(display));
fgcolor = BlackPixel(display,screen);
bgcolor = WhitePixel(display,screen);

window = XCreateSimpleWindow(display,root,0,0,200,200,2,fgcolor,bgcolor);

cmap = DefaultColormap (display, screen);
XAllocNamedColor(display, cmap, colorname, &color, &ignore);
fgcolor = color.pixel;
gcval.foreground = fgcolor;
gcval.background = bgcolor;
draw = XCreateGC(display,window,GCForeground|GCBackground,&gcval);

XSelectInput(display,window,eventmask);
XMapWindow(display,window);

for (;:wink: {
XWindowEvent(display,window,eventmask,&event);
switch (event.type) {
case Expose:
XClearWindow(display,window);
break;
case ButtonPress:
XDrawPoint(display,window,draw, event.xbutton.x,event.xbutton.y);
break;
case KeyPress:
exit(0);
default:
fprintf(stderr,„Unexpected event: %d\n“,event.type);
}
}
}

Hi,

kein Compilerfehler - irgend was mit dem linken haut nicht hin, wie wärs mit einem „-lxlib“?

Davon abgesehen: Nimm lieber ein toolkit - QT, GTK oder wegen mir auch xforms. Mit der xlib rummaggeln ist einfach zu aufwendig.

MfG Diez

dann hab ich jetzt einen linkfehler … geht immer noch nicht

jetzt mit:

gcc -o test file.c -l /usr/X11R6/lib

(auch mit gcc -o test file.c -lxlib probiert …)

/usr/i486-suse-linux/bin/ld: cannot find -l/usr/X11R6/lib
returned 1 exit status

Davon abgesehen: Nimm lieber ein toolkit - QT, GTK oder wegen
mir auch xforms. Mit der xlib rummaggeln ist einfach zu
aufwendig.

kein interesse … (kenn mich zwar schon mit qt und gtk aus …
aber ich wills mal mit xlib machen … wird nen raytracer, somit
brauchts kein riesen interface :wink:

gruss und danke

berni

Hi,

viel hast du mit gcc/libs noch nicht gemacht, oder? Egal :smile:

Verzeichnisse wie /usr/X11R6/lib bindest du mit -L (grosses L!) ein, die erweitern dann den Suchpfad für -l. Und ob die xlib xlib, x, Xlib oder wie auch immer heisst, solltest du auch prüfen, meine option habe ich nicht validiert.

Welchen Grund du hast, einen raytracer mit einer grafischen Ausgabe zu versehen, würde mich ja auch mal interessieren. Die Performance spielt bei so einer App doch keine Rolle, da reicht xv oder was immer - aber wenn du dich quälen willst :smile:

MfG Diez

gcc -o test file.c -l /usr/X11R6/lib

(auch mit gcc -o test file.c -lxlib probiert …)

/usr/i486-suse-linux/bin/ld: cannot find -l/usr/X11R6/lib
returned 1 exit status

Davon abgesehen: Nimm lieber ein toolkit - QT, GTK oder wegen
mir auch xforms. Mit der xlib rummaggeln ist einfach zu
aufwendig.

kein interesse … (kenn mich zwar schon mit qt und gtk aus

aber ich wills mal mit xlib machen … wird nen raytracer,
somit
brauchts kein riesen interface :wink:

gruss und danke

berni

Hi!

Mal nebenbei: ich würde mein Testprogramm nicht unbedingt ‚test‘ nennen, da es nicht sehr unwahrscheinlich ist, daß du bereits ein Programm dieses Namens installiert hast - wenn dann dieses anstelle von ‚test‘ im CWD ausgeführt wird, ist die Überraschung groß :wink:

HTH