错误:编译dbus时未知的类型名称

mki*_*ind 0 c gcc dbus

我有一个包含一些dbus内容的c文件并实现了dbus.h. 到目前为止这个工作正常.现在我打算将我的c文件拆分为c文件和头文件.但现在 - 编译过程失败了:

gcc -o dbus `pkg-config --cflags --libs dbus-1` dbus.c
In file included from dbus.c:1:0:
dbus.h:12:27: error: unknown type name ‘DBusMessage’
dbus.h:12:45: error: unknown type name ‘DBusConnection’
dbus.c: In function ‘dbus_send_signal’:
dbus.c:8:4: error: unknown type name ‘DBusMessage’
dbus.c:9:4: error: unknown type name ‘DBusMessageIter’
...
Run Code Online (Sandbox Code Playgroud)

我只是将以前的c文件拆分为:

#include "dbus.h" // include local dbus.h

/**
 * Connect to the DBUS bus and send a broadcast signal
 */
void dbus_send_signal(char* sigvalue)
{
   DBusMessage* msg;
   DBusMessageIter args;
   DBusConnection* conn;
   ...
Run Code Online (Sandbox Code Playgroud)

和local-header dbus.h文件:

#ifndef DBUS_H
#define DBUS_H

#include <dbus/dbus.h> // include the global dbus.h
#include <stdbool.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

void dbus_listen();
void dbus_send_signal(char *sigvalue);
...
Run Code Online (Sandbox Code Playgroud)

我没有改变代码本身,所以我有点困惑.只是将内容拆分为c和h文件.你有个主意吗?gcc参数错了吗?

Per*_*son 5

这只是猜测,但也许<dbus/dbus.h>也包含

#ifndef DBUS_H
#define DBUS_H
Run Code Online (Sandbox Code Playgroud)

你需要使它们不一样,例如将你的本地改为

#ifndef LOCAL_DBUS_H
#define LOCAL_DBUS_H
Run Code Online (Sandbox Code Playgroud)