2016-07-28 10 views
0

Ich versuche, dbus-1 in einem Projekt zu kompilieren mingw32-gcc, erhalte ich einen Compiler-Fehlerdbus-1 gcc-Fehler: erwartet '', '' oder ')' vor 'Struktur'

error: expected ';', ',' or ')' before 'struct'. 

Soweit ich sagen kann, ist die betreffende Zeile ein Funktionsaufruf. Dies ist ein Auszug aus dem Makefile-Log:

` c:/MinGW/include/dbus-1.0/dbus/dbus-message.h:73:95: error: expected ';', ',' or ')' before 'struct' 
DBusMessage* dbus_message_new_method_call(const char *bus_name, const char *path, const char *interface ,const char *method);` 

hier ist der Auszug aus der dbus-message.h Header-Datei:

#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION) 
#error "Only <dbus/dbus.h> can be included directly, this file may disappear  or change contents." 
#endif 

#ifndef DBUS_MESSAGE_H 
#define DBUS_MESSAGE_H 

#include <dbus/dbus-macros.h> 
#include <dbus/dbus-types.h> 
#include <dbus/dbus-arch-deps.h> 
#include <dbus/dbus-memory.h> 
#include <dbus/dbus-errors.h> 
#include <stdarg.h> 

DBUS_BEGIN_DECLS 

/** 
* @addtogroup DBusMessage 
* @{ 
*/ 

typedef struct DBusMessage DBusMessage; 
/** Opaque type representing a message iterator. Can be copied by value, and contains no allocated memory so never needs to be freed and can be allocated on the stack. */ 
typedef struct DBusMessageIter DBusMessageIter; 

/** 
    * DBusMessageIter struct; contains no public fields. 
    */ 
    struct DBusMessageIter 
{ 
    void *dummy1;   /**< Don't use this */ 
    void *dummy2;   /**< Don't use this */ 
    dbus_uint32_t dummy3; /**< Don't use this */ 
    int dummy4;   /**< Don't use this */ 
    int dummy5;   /**< Don't use this */ 
    int dummy6;   /**< Don't use this */ 
    int dummy7;   /**< Don't use this */ 
    int dummy8;   /**< Don't use this */ 
    int dummy9;   /**< Don't use this */ 
    int dummy10;   /**< Don't use this */ 
    int dummy11;   /**< Don't use this */ 
    int pad1;    /**< Don't use this */ 
    int pad2;    /**< Don't use this */ 
    void *pad3;   /**< Don't use this */ 
    }; 

DBUS_EXPORT 
DBusMessage* dbus_message_new    (int   message_type); 
DBUS_EXPORT 

DBusMessage* dbus_message_new_method_call(const char *bus_name, const char *path, const char *interface ,const char *method); 

Ich konnte nicht herausfinden, warum der Compiler denkt Schnittstelle eine Struktur ist. Beim Betrachten der c-Quelle und der anderen Header scheint es wie ein Char-String-Zeiger zu sein.

alle Vorschläge werden sehr geschätzt.

+1

Egal welche Linie 73 ist, überprüfen Sie die * Runde * davor und suchen Sie nach einem fehlenden Semikolon. – WhozCraig

+0

Vorschlag: erweitern Sie Makros manuell, um zu sehen, was der "tatsächliche" c-Code sein wird, wenn die Fehler-/Zeilennummer keinen Sinn ergibt. Makros sind oft eine Quelle von Syntaxfehlern, besonders wenn Sie Dinge wie "DBUS_BEGIN_DECLS" tun und Blöcke von Inline-Code mit Makros ausblenden. –

Antwort

0

Ich bin mir nicht sicher, ob der von Ihnen angegebene Code die gesamte Header-Datei ist. Aber wenn es so aussieht, fehlt dir ein #endif für #ifndef DBUS_MESSAGE_H Header Guard. Versuchen Sie, #endif am Ende Ihrer Datei zu setzen.

+0

Vielen Dank für Ihre Vorschläge. Ich habe eine andere dbus-Distribution auf www.freedesktop.org gefunden, die Dateien enthält, die nicht in der Distribution waren, die ich hatte. Offenbar in meinem Code war struct DBusMessage in keiner der Dateien definiert. In dbus-1 10.8 Verteilung gibt es mehrere andere Header-Dateien, insbesondere dbus-message-private.h, die die Struktur definiert. Der Code kompiliert nun ok. – Bill

Verwandte Themen