Motif Widget erzeugt X-Error



  • Ich habe ein kleines Mini-Programm, welches sich anstandslos kompilieren lässt.

    #include <stdlib.h>
    #include <stdio.h>
    #include <Xm/Xm.h>
    #include <Xm/ButtonBox.h>
    
    int main(int argc, char *argv[]) {
    
    	/* WIDGETS */
    	XtAppContext  app;
    	Widget        toplevel, btn;
    
    	toplevel = XtVaAppInitialize(&app,"noname", NULL, 0, &argc, argv, NULL, XtNwidth, 321, XtNheight, 200, NULL);
    
    	btn = XtVaCreateManagedWidget("Button", xmButtonBoxWidgetClass, toplevel, XtNwidth, 75, XtNheight, 25, NULL);
    	XtRealizeWidget(toplevel);
    	XtAppMainLoop(app);
    }
    
    

    Nur wen ich es starte, schmiert es mit folgendem Fehler ab:

    X Error of failed request:  BadWindow (invalid Window parameter)
      Major opcode of failed request:  19 (X_DeleteProperty)
      Resource id in failed request:  0x0
      Serial number of failed request:  119
      Current serial number in output stream:  123
    

    Kommandiere ich die Zeile mit "btn =...." aus, dann startet das Programm ohne Fehler.
    Was ich festgestellt habe, sobald ich eine Komponente von Xm verwende, kommt es zu diesem Fehler. Irgendwie scheint es mit, das die Motif-lib ein Kommunikationsproblem mit Xt hat.
    Ich habe auch schon versucht die Modif libs selbst zu kompilieren, da schmiert es auch ab.

    Einer eine Idee ?

    Hat einer von euch die Motif-Widget schon mal verwendet ?



  • Vermutlich baust du "falsch" bzw. die reihenfolge in der libs beim linken angegeben werden ist hier relevant:

    https://bugzilla.redhat.com/show_bug.cgi?id=870712#c2

    Eine suche nach "motif BadWindow X_DeleteProperty" hat das obige als ergebnis geliefert unter anderem.

    Du solltest mal an seinen such skills arbeiten 😉



  • Danke es hat geholfen, so geht es

    gcc -o main main.c -lXm -lXt
    

    Anscheinend reicht es nicht, wen ich es nur so mache:

    gcc -o main main.c -lXm
    


  • @Mathuas sagte in Modif Widget erzeugt X-Error:

    Danke es hat geholfen, so geht es

    gcc -o main main.c -lXm -lXt
    

    Anscheinend reicht es nicht, wen ich es nur so mache:

    gcc -o main main.c -lXm
    

    @Mathuas sagte in Modif Widget erzeugt X-Error:

    Danke es hat geholfen, so geht es

    gcc -o main main.c -lXm -lXt
    

    Anscheinend reicht es nicht, wen ich es nur so mache:

    gcc -o main main.c -lXm
    

    Klar geht das nicht denn du verwendest Xt funktionen. ohne -lXt kommt bei mir:

    /usr/lib/gcc/x86_64-pc-linux-gnu/12/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib64/libXt.so.6: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status```


  • @Mathuas sagte in Modif Widget erzeugt X-Error:

    Danke es hat geholfen, so geht es

    Ich hatte Dir vor einigen Wochen einige Links gepostet, wie man mit X11 speziell mit Motif Software entwickeln kann. Nochmals O'Reilly X11 Series Volume 6A das Buch ist wirklich lesenswert. Da steht dann auch drin, wie man die Programme übersetzen muss. Allerdings ist die Literatur in Englisch.



  • @john-0
    Danke, der Link ist mir irgendwie unter gegangen.
    Das Buch sieht interessant aus.



  • Schau Dir am besten gleich die komplette O'Reilly X11 Series an. Die Bücher sind zwar schon etwas älter und in der Regel nur für X11 R3 und R4 geschrieben, aber für die Grundkonzepte sind die Bücher immer noch sinnvoll, wenn man denn für die alten FrameWorks Software schreiben will. Dann muss man aufpassen, dass es einige der Bücher sowohl als Motif Version existieren und in einer OpenLook Version. OpenLook ist noch älter und definitiv nur noch von geschichtlichen Interesse. Außer Du willst unbedingt für eine alte SUN etwas schreiben.

    Bei IST finden sich für die Volume 6A und 6B neue Auflagen für Motif 2.1, die Versionen bei O'Reilly sind für Motif 1.2.

    https://www.ist.co.uk/motif/download/book_download.html

    Es gibt dann noch von einige Büchern von Douglas A. Young. Ggf. finden sich die bei archiv.org

    • The X Window System Programming an Applications with Xt (OSF/Motif Edition)


  • Danke für die Links. Interessant, das diese Bücher alle frei zur Verfügung sind.
    Und vor allem, das es so viele Lektüre darüber gab, obwohl Windows viel verbreiterter war/ist.

    Ich denke für mich ist das Buch Motif 2.1 am interessantesten.

    Ich habe schon mehrere Widgets angeguckt, Athena, GTK und jetzt Motif.
    Unter dem Strich, Athena war schon ein recht fortschrittlicher Anfang. Und mit Motif sieht es schon echt zeitgemäss aus.

    Irgendwie frage ich mich, für was man da auf GTK umgestiegen ist ?



  • @Mathuas sagte in Modif Widget erzeugt X-Error:

    Danke für die Links. Interessant, das diese Bücher alle frei zur Verfügung sind.

    Mittlerweile sind die Bücher frei verfügbar, weil Motif und zunehmend auch X11 keine Rolle mehr spielen. X11 wird in absehbarer Zeit durch Wayland ersetzt werden. Deshalb habe ich Dir in Deinen vorherigen Postings den Hinweis gegeben, dass Du Deine Zeit nicht mehr mit diesen alten Toolkits vergeuden solltest.

    Die OpenGroup hat sich mit der Produktpolitik rund um Motif selbst ins Abseits gestellt. Als die FOSS Betriebssysteme (Linux, NetBSD, FreeBSD, …) aufkamen gab es kaum freie Widget-Libraries außer den Athena Widgets und SUNs XView. Allerdings waren die Athena Widgets nur als eine Art von Demo geplant, und moderne GUIs damit zu entwerfen ist nicht so ohne weiteres möglich. XView galt damals schon als technisch veraltet und SUN hatte die Entwicklung zu Gunsten von Motif eingestellt.

    Das Problem an Motif war aber, dass man selbst eine Lizenz für die Laufzeitumgebung benötigt (die war nicht billig), und das Developerpaket noch teurer war. Der darauf basierende CDE Desktop, war nur gegen weitere Zahlungen für FOSS OS erhältlich. Wenn man kommerzielles UNIX erworben hatte, dann war darin Motif und CDE als Laufzeitlizenz bereits inkludiert, und das Developerpaket für Motif und CDE wurde mit den System Compiler ausgeliefert. Allerdings waren diese Compilerpakete richtig teuer, und nur etwas für Firmen. Als Privatperson oder kleiner Entwickler konntest Du Dir die tausenden von DM/Euros nicht leisten. Sinnvoll war dazu noch einen der kommerzieller GUI-Builder wie IST X-Builder oder ICS BX Pro zu nutzen. Die dann zusätzlich noch einige tausende Euros kosteten.

    Und vor allem, das es so viele Lektüre darüber gab, obwohl Windows viel verbreiterter war/ist.

    OpenLook bzw. Motif waren früher die Standard Libraries für die Softwareentwicklung auf UNIX Workstations, und für bestimmte Aufgaben waren UNIX Workstations alternativlos. Da sie sehr teuer waren, lohnte es sich auch für diesen Nischenmarkt umfangreiche Dokumentationen anzufertigen und zu vertreiben. Was waren da schon einige hundert Mark für Bücher, wenn das System üblicherweise jenseits der 10.000 DM kostete?

    Irgendwie frage ich mich, für was man da auf GTK umgestiegen ist ?

    GTK ist freie Software, und hat nicht die Problematik kommerzieller Software, die dann für jeden Nutzer Lizenzkosten nach sich gezogen hätte. Wäre damals Motif als OpenMotif veröffentlicht worden, wäre weder Qt noch GTK jemals erfolgreich gewesen. Die OpenGroup wollte aber weiterhin Geld mit den Lizenzen für Motif erwirtschaften.



  • @Mathuas sagte in Modif Widget erzeugt X-Error:

    Unter dem Strich, Athena war schon ein recht fortschrittlicher Anfang. Und mit Motif sieht es schon echt zeitgemäss aus.

    Irgendwie frage ich mich, für was man da auf GTK umgestiegen ist ?

    Offensichtlich sieht ein Großteil der Entwickler, inklusive meinereiner, das vollkommen anders, auch wenn ich QT bevorzuge.



  • @john-0

    Danke erst mal für die grosse Antwort.
    Ich dachte, Motif sei frei, wie das meiste bei Linux.
    Aber wen es leider so ist mit den Lizenzen, dann verstehe ich, das es sich nicht durchsetzen konnte.
    Wie bei vielen, Lizensgebühren machen viel kaputt. Bei KDE1 war doch auch sowas.

    X11 wird in absehbarer Zeit durch Wayland ersetzt werden.

    So viel es mir ist, wird es eine Brücke zu X11 geben.

    Allerdings waren die Athena Widgets nur als eine Art von Demo geplant, und moderne GUIs damit zu entwerfen ist nicht so ohne weiteres möglich.

    Da hast du recht, viele Komponenten sind recht beschränkt. ZB. geht kaum eine Tastatur-Steuerung. Aber das Widget Management war recht gut. Die Anordnung lässt sich sehen, man muss immer bedenken für dazumal.



  • Ein Vorteil haben die XToolkits basierenden Widgets, sie sind recht schlank und somit gut für den Raspi 1+2 geeignet.



  • Wen ich die Sourcen des Motif-Widgets selbst kompilieren will, bekomme ich folgender Fehler:

    $ make
    ...
    make[2]: Verzeichnis „/usr/local/src/motif_git/motif-code/tools/wml“ wird betreten
    /bin/bash ../../libtool  --tag=CC   --mode=link gcc  -g -O2 -Wall -g -fno-strict-aliasing -Wno-unused -Wno-comment -I/usr/local/include -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16     -o wmldbcreate wmldbcreate.o ../../lib/Xm/libXm.la -lfontconfig -lfreetype -lXft -ljpeg -lpng
    libtool: link: gcc -g -O2 -Wall -g -fno-strict-aliasing -Wno-unused -Wno-comment -I/usr/local/include -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -o .libs/wmldbcreate wmldbcreate.o  ../../lib/Xm/.libs/libXm.so -lfontconfig -lfreetype -lXft -ljpeg -lpng
    /usr/bin/ld: wmldbcreate.o: undefined reference to symbol 'XtStrings'
    /usr/bin/ld: /usr/local/lib/libXt.so.6: error adding symbols: DSO missing from command line
    collect2: error: ld returned 1 exit status
    make[2]: *** [Makefile:500: wmldbcreate] Fehler 1
    make[2]: Verzeichnis „/usr/local/src/motif_git/motif-code/tools/wml“ wird verlassen
    make[1]: *** [Makefile:397: all-recursive] Fehler 1
    make[1]: Verzeichnis „/usr/local/src/motif_git/motif-code/tools“ wird verlassen
    make: *** [Makefile:455: all-recursive] Fehler 1
    

    Dabei spielt es keiner Rolle, ob ich die Sourcen von hier hole: https://sourceforge.net/projects/motif/files/
    Ich habe auch ältere Versionen probiert.
    Oder direkt bei ubuntu mit

    $ apt source libmotif-dev 
    

    Was läuft bei mir falsch ?

    Andere Pakete wie libXmu, xorg-libXaw, etc. gehen ohne Probleme.

    Nachtrag: bei den ubuntu-Sourcen motz er mit 'XFillArc', bei den original-Sourcen mit 'XTStrings'.



  • Versuch doch zuerst die Sachen zu verwenden, die bei Deiner Distribution dabei sind. Daher ist das Motif Developer Package bei Dir installiert? Falls ja, copy&paste mit dem Code unten und probier aus, ob Du das Programm übersetzt bekommst.

    Ich habe das erste Beispielprogramm aus Motif Programming Manual Volume Six A OSF/Motif 1.2 Release von Seite 19/20 abgetippt und etwas im Codestil modernisiert.

    /* hello.c */
    #include <Xm/PushB.h>
    #include <stdio.h>
    
    void button_pushed (Widget widget, XtPointer client_data, XtPointer call_data) {
    	printf ("Hello Yourself!\n");
    }
    
    int main(int argc, char *argv[]) {
    	Widget	        toplevel, button;
    	XtAppContext	app;
    	XmString        label;
    
    	XtSetLanguageProc (NULL, NULL, NULL);
    
    	toplevel = XtVaAppInitialize (&app, "Hello", NULL, 0, &argc, argv, NULL, NULL);
    
    	label = XmStringCreateLocalized ("Push here to say hello");
    	button = XtVaCreateManagedWidget ("pushme", xmPushButtonWidgetClass, toplevel, XmNlabelString, label, NULL);
    
    	XmStringFree (label);
    	XtAddCallback (button, XmNactivateCallback, button_pushed, NULL);
    	XtRealizeWidget (toplevel);
    
    	XtAppMainLoop (app);
    }
    

    Übersetzen solltest Du das mit

    gcc hello.c -lXm -lXt -lX11 -o hello
    


  • @john-0 sagte in Modif Widget erzeugt X-Error:

    Falls ja, copy&paste mit dem Code unten und probier aus, ob Du das Programm übersetzt bekommst.

    Geht ohne Probleme.

    Mich nimmt es trotzdem wunder, wieso sich die Sourcen nicht übersetzen lassen.
    Die Packetersteller von Ubuntu müssen dies ja auch hingekrieget habe.



  • @Mathuas sagte in Modif Widget erzeugt X-Error:

    Mich nimmt es trotzdem wunder, wieso sich die Sourcen nicht übersetzen lassen.
    Die Packetersteller von Ubuntu müssen dies ja auch hingekrieget habe.

    Manchmal ist es notwendig Patches auf das Original anzuwenden, weil etwa Bugs drin sind, aber bestimmte Neuerungen alten Code brechen, …

    Für Ubuntu finden sich die Sourcen unter, und auch das Patch File.



  • Dieser Beitrag wurde gelöscht!


  • @john-0

    @john-0 sagte in Motif Widget erzeugt X-Error:

    Schau Dir am besten gleich die komplette O'Reilly X11 Series an. Die Bücher sind zwar schon etwas älter und in der Regel nur für X11 R3 und R4 geschrieben, aber für die Grundkonzepte sind die Bücher immer noch sinnvoll, wenn man denn für die alten FrameWorks Software schreiben will. Dann muss man aufpassen, dass es einige der Bücher sowohl als Motif Version existieren und in einer OpenLook Version. OpenLook ist noch älter und definitiv nur noch von geschichtlichen Interesse. Außer Du willst unbedingt für eine alte SUN etwas schreiben.

    Bei IST finden sich für die Volume 6A und 6B neue Auflagen für Motif 2.1, die Versionen bei O'Reilly sind für Motif 1.2.

    https://www.ist.co.uk/motif/download/book_download.html

    Es gibt dann noch von einige Büchern von Douglas A. Young. Ggf. finden sich die bei archiv.org

    • The X Window System Programming an Applications with Xt (OSF/Motif Edition)

    Das Buch vol6a gibt es auch als angenehme HTML-Variante:
    https://www.oreilly.com/openbook/motif/vol6a/Vol6a_html/toc.html


Anmelden zum Antworten