我正在努力学习dbus和编译/链接Linux上的程序。我对从头开始构建和链接应用程序相当陌生。为此,我在Ubuntu上创建一个简单的client+server应用程序,通过gdbus进行通信。我正在使用gdbus-codegen工具为dbus接口生成.c和.h文件。我已经创建了一个名为dbus_interface.xml的示例xml描述文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE node PUBLIC
"-//freedesktop//DTD D-Bus Object Introspection 1.0//EN"
"http://standards.freedesktop.org/dbus/1.0/introspect.dtd">
<node>
<interface name="org.hello.world">
<method name="get_magic_number">
<arg type="i" name="magic_number" direction="out"/>
</method>
</interface>
</node> 我使用以下命令生成代码:
gdbus-codegen --generate-c-code generated_code dbus_interface.xml生成generated_code.c和generated_code.h文件。我在客户端应用程序中包含了generated_code.h头文件,我正试图使用以下命令与gcc一起编译该文件:
gcc -Wall -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include client.c generated_code.c -o client但是,我得到以下错误:
generated_code.c:17:12: fatal error: gio/gunixfdlist.h: No such file or directory
17 | # include <gio/gunixfdlist.h>
| ^~~~~~~~~~~~~~~~~~~
compilation terminated.为什么我的系统中没有这个头文件?我在/usr/include/glib-2.0/gio中有gio目录,它包含一堆头文件,但不包含gunixfdlist.h。
作为附带说明:
发布于 2020-09-01 19:46:29
头文件位于/usr/include/gio-unix-2.0/gio中。正如文档中所指出的
注意,
<gio/gunixfdlist.h>属于UNIX特定的GIO接口,因此在使用它时必须使用gio-unix-2.0.pcpkg-config文件。
因此,您应该在项目配置中使用pkg-config,并确保gio-unix-2.0包含在获取编译标志的调用中。
https://stackoverflow.com/questions/63692782
复制相似问题