首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确编译和链接gdbus程序

如何正确编译和链接gdbus程序
EN

Stack Overflow用户
提问于 2020-09-01 17:38:24
回答 1查看 650关注 0票数 2

我正在努力学习dbus和编译/链接Linux上的程序。我对从头开始构建和链接应用程序相当陌生。为此,我在Ubuntu上创建一个简单的client+server应用程序,通过gdbus进行通信。我正在使用gdbus-codegen工具为dbus接口生成.c和.h文件。我已经创建了一个名为dbus_interface.xml的示例xml描述文件:

代码语言:javascript
复制
<?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>    

我使用以下命令生成代码:

代码语言:javascript
复制
gdbus-codegen --generate-c-code generated_code dbus_interface.xml

生成generated_code.c和generated_code.h文件。我在客户端应用程序中包含了generated_code.h头文件,我正试图使用以下命令与gcc一起编译该文件:

代码语言:javascript
复制
    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

但是,我得到以下错误:

代码语言:javascript
复制
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。

作为附带说明:

  1. 我不是故意在build命令中使用pkg-config来更好地理解pkg-config在编译过程中扩展到的内容。
  2. 我想我将不得不将实际的库位置提供给链接器以及我的构建命令,但是我想先解决没有正确解决包含的问题。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-01 19:46:29

头文件位于/usr/include/gio-unix-2.0/gio中。正如文档中所指出的

注意,<gio/gunixfdlist.h>属于UNIX特定的GIO接口,因此在使用它时必须使用gio-unix-2.0.pc pkg-config文件。

因此,您应该在项目配置中使用pkg-config,并确保gio-unix-2.0包含在获取编译标志的调用中。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63692782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档