如何解决如何正确编译和链接gdbus程序
我正在尝试学习dbus和Linux上程序的编译/链接。我是从头开始构建和链接应用程序的新手。为此,我在Ubuntu上创建了一个简单的客户端+服务器应用程序,它们通过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
生成generate_code.c和generated_code.h文件。我已经在客户端应用程序中包含了generate_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。
作为旁注:
- 我不是故意在build命令中使用pkg-config以便更好地了解pkg-config在编译过程中会扩展到什么
- 我猜我将必须向链接器以及我的build命令提供实际的库位置,但是我想解决首先解决不正确包含问题的问题
解决方法
头文件位于/usr/include/gio-unix-2.0/gio
中。如documentation中所述:
请注意,
<gio/gunixfdlist.h>
属于UNIX专用的GIO接口,因此在使用gio-unix-2.0.pc
pkg-config文件时必须使用它。
因此,您应该在项目配置中使用pkg-config,并确保在获取编译标志的调用中包含gio-unix-2.0
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。