[gelöst][XLib] Verwendung der XLib führt zu Fehlern beim Kompilieren



  • Hallo c-Community,

    ich habe eine Frage zu der Verwendung von XLib. Also nur im Voraus, habe schonmal ein Fenster mit XLib erzeugt aber das nun auftretende Problem habe ich noch nicht beobachtet. Zuerst einmal verwende ich folgenden Quellcode:

    CLASS_X11Window.h

    #ifndef CLASSX11WINDOW
    #define CLASSX11WINDOW
    
    #include <X11/Xlib.h>
    #include <pthread.h>
    #include <stdlib.h>
    #include "../../Functions/header/FUNCTION_errmsg.h"
    #include "../../Functions/header/FUNCTION_memory.h"
    #include "../../Classes/header/CLASS_Application.h"
    #include "../../Classes/header/CLASS_Object.h"
    #include "../../Classes/header/CLASS_V4LDevice.h"
    
    #define X11WINDOW "X11Window"
    
    typedef struct
    {
    	pClassObject Object;
    	pClassV4LDevice V4LDevice;
    	int X, Y, Width, Height, screen;
    	Display* display;
    	Window window;
    	XEvent event;
    	pthread_t X11WindowThread;
    }tClassX11Window, *pClassX11Window;
    
    /*
     *		Konstruktor und Destruktor
     */
    
    void	X11WINDOW_Create(pClassX11Window* X11Window, int X, int Y, int Width, int Height, pClassV4LDevice V4LDevice, pClassApplication Application);
    void	X11WINDOW_Free(pClassX11Window X11Window);
    
    /*
     *		Methoden des X11Window
     */
    
    void*	X11WINDOW_ThreadFunction(void* argv);
    
    #endif
    

    CLASS_X11Window.c

    #include "../header/CLASS_X11Window.h"
    
    /*
     *		Konstruktor und Destruktor
     */
    
    void	X11WINDOW_Create(pClassX11Window* X11Window, int X, int Y, int Width, int Height, pClassV4LDevice V4LDevice, pClassApplication Application)
    {
    	(*X11Window) = mem_malloc(sizeof(tClassX11Window), X11WINDOW, "failed to allocate memory for x11 window", 9);
    	OBJECT_Create(&(*X11Window)->Object, Application);
    	OBJECT_Set_ClassName((*X11Window)->Object, X11WINDOW);
    	(*X11Window)->V4LDevice = V4LDevice;
    	(*X11Window)->X = X;
    	(*X11Window)->Y = Y;
    	(*X11Window)->Width = Width;
    	(*X11Window)->Height = Height;
    	if (NULL == ((*X11Window)->display = XOpenDisplay(NULL))) errmsg_exit(X11WINDOW, "failed to open x11 window", 17);
    	(*X11Window)->window = XCreateSimpleWindow((*X11Window)->display, RootWindow((*X11Window)->display, (*X11Window)->screen), (*X11Window)->X, (*X11Window)->Y, (*X11Window)->Width, (*X11Window)->Height, 1, BlackPixel((*X11Window)->display, (*X11Window)->screen), WhitePixel((*X11Window)->display, (*X11Window)->screen));
    	XSelectInput((*X11Window)->display, (*X11Window)->window, ExposureMask | KeyPressMask);
    	XMapWindow((*X11Window)->display, (*X11Window)->window);
    	pthread_create(&(*X11Window)->X11WindowThread, NULL, X11WINDOW_ThreadFunction, (void*)(*X11Window));
    }
    
    void	X11WINDOW_Free(pClassX11Window X11Window)
    {
    	if (X11Window != NULL)
    	{
    		if (X11Window->Object != NULL) OBJECT_Free(X11Window->Object);
    		mem_free(X11Window);
    	}
    }
    
    /*
     *		Methoden des X11Window
     */
    
    void*	X11WINDOW_ThreadFunction(void* argv)
    {
    	pClassX11Window X11Window = (pClassX11Window)argv;
    	while (OBJECT_Get_AppStatus(X11Window->Object) < 3)
    	{
    		//nothing
    	}
    	pthread_exit(NULL);
    }
    

    Wenn ich alles zusammen kompiliere, tritt folgender Fehler auf:

    gcc -c -o obj/CLASS_X11Window.o ../Classes/src/CLASS_X11Window.c -ggdb -Wall -Werror -DVERSION=\"0.0.3\"
    In file included from ../Classes/src/../header/CLASS_X11Window.h:9,
    from ../Classes/src/CLASS_X11Window.c:1:
    ../Classes/src/../header/../../Classes/header/CLASS_Application.h:21: error: two or more data types in declaration specifiers
    cc1: warnings being treated as errors
    ../Classes/src/../header/../../Classes/header/CLASS_Application.h:21: error: declaration does not declare anything
    ../Classes/src/../header/../../Classes/header/CLASS_Application.h:35: error: two or more data types in declaration specifiers
    In file included from ../Classes/src/../header/CLASS_X11Window.h:10,
    from ../Classes/src/CLASS_X11Window.c:1:
    ../Classes/src/../header/../../Classes/header/CLASS_Object.h:44: error: two or more data types in declaration specifiers
    make: *** [obj/CLASS_X11Window.o] Fehler 1

    Wenn ich alle XLib-spezifischen Sachen aus dem Quellcode entferne, kompiliert das Programm ohne Fehler. Ich gehe davon aus, dass XLib fehlerfrei funktioniert (ist auf jeden Fall installiert und neuste Version). Wo habe ich da einen Fehler gemacht beim Programmieren?

    Noch zur Ergänzung hier die Libraries die ich beim kompilieren mit gcc verwende:

    LDFLAGS = -lX11 -lpthread -lv4l1 -lv4l2

    Hoffe jemand kann mir helfen.

    MfG
    mirrowwinger



  • Da fast 24h vergangen sind seit meinem Beitrag und um auch darzustellen, dass es eine Lösung gibt, wähle ich mal die Möglichkeit auf meinen eigenen Post zu antworten.

    Der Fehler ist gefunden und erklärt sich auch ein wenig aus der Kompiler-Meldung für den Fehler. Anscheinend gibt es in der xLib eine Variable mit dem Namen Status, welche ich auch in meiner Klasse Application verwende.

    In file included from ../Classes/src/../header/CLASS_X11Window.h:9,
    from ../Classes/src/CLASS_X11Window.c:1:
    ../Classes/src/../header/../../Classes/header/CLASS_Application.h:21: error: two or more data types in declaration specifiers
    cc1: warnings being treated as errors

    Nachdem ich die Variable umbenannt habe, kompiliert mein Projekt wieder fehlerfrei.

    MfG
    mirrowwinger


Anmelden zum Antworten