今天在学习dbus的时候,发现自己的ubuntu18.04虽然安装了dbus,但是却找不到dbus.h的路径。
dbus-client.c:3:9: fatal error: dbus/dbus.h: 没有那个文件或目录
#include<dbus/dbus.h>
^~~~~~~~~~~~~
compilation terminated.
执行 ps -ef|grep dbus,也有dbus进程在运行。
root@ipanel:/home/share/share/dbus# ps -ef|grep dbus
message+ 626 1 0 16:26 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
gdm 918 837 0 16:26 ? 00:00:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
gdm 1035 1030 0 16:26 ? 00:00:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
ipanel 1285 1249 0 16:27 ? 00:00:00 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
ipanel 1395 1390 0 16:27 ? 00:00:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
root 8933 8887 0 17:50 pts/2 00:00:00 grep --color=auto dbus
但是查看/usr/lib/dbus-1.0/查看,只有dbus-daemon-launch-helper
root@ipanel:/home/share/share/dbus# ls /usr/lib/dbus-1.0/
dbus-daemon-launch-helper
瞬间不知道啥原因了。
在网上查了好久,终于找到了解决方法。现记录下来。
1. 安装dbus
root@ipanel:/home/share/share/dbus# apt-get install dbus
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
dbus 已经是最新版 (1.12.2-1ubuntu1.4)。
下列软件包是自动安装的并且现在不需要了:
gir1.2-goa-1.0 gir1.2-snapd-1
使用'apt autoremove'来卸载它(它们)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
2. 安装d-feet,用于查看 session bus 和 system bus
root@ipanel:/usr/lib# apt-get install d-feet
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
gir1.2-goa-1.0 gir1.2-snapd-1
使用'apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
d-feet
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 104 kB 的归档。
解压缩后会消耗 585 kB 的额外空间。
获取:1 http://cn.archive.ubuntu.com/ubuntu bionic/universe amd64 d-feet all 0.3.13-1 [104 kB]
已下载 104 kB,耗时 2秒 (64.4 kB/s)
正在选中未选择的软件包 d-feet。
(正在读取数据库 ... 系统当前共安装有 179812 个文件和目录。)
正准备解包 .../d-feet_0.3.13-1_all.deb ...
正在解包 d-feet (0.3.13-1) ...
正在设置 d-feet (0.3.13-1) ...
正在处理用于 gnome-menus (3.13.3-11ubuntu1.1) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.17-2) 的触发器 ...
正在处理用于 mime-support (3.60ubuntu1) 的触发器 ...
正在处理用于 desktop-file-utils (0.23-1ubuntu3.18.04.2) 的触发器 ...
正在处理用于 libglib2.0-0:amd64 (2.56.4-0ubuntu0.18.04.9) 的触发器 ...
正在处理用于 man-db (2.8.3-2ubuntu0.1) 的触发器 ...
root@ipanel:/usr/lib# apt-get install libgtk2.0-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
gir1.2-goa-1.0 gir1.2-snapd-1
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gir1.2-gtk-2.0 libarchive-cpio-perl libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev
libexpat1-dev libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libice-dev libltdl-dev libmail-sendmail-perl libpango1.0-dev libpixman-1-dev
libpng-dev libpng-tools libpthread-stubs0-dev libsigsegv2 libsm-dev libsys-hostname-long-perl libtool libx11-dev libx11-doc libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev
libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxml2-utils libxrandr-dev libxrender-dev m4 po-debconf
x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-xext-dev x11proto-xinerama-dev
xorg-sgml-doctools xtrans-dev
建议安装:
autoconf-archive gnu-standards autoconf-doc dh-make dwz libcairo2-doc libgtk2.0-doc libice-doc libtool-doc libpango1.0-doc libsm-doc gfortran | fortran95-compiler gcj-jdk libxcb-doc
libxext-doc m4-doc libmail-box-perl
下列【新】软件包将被安装:
autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gir1.2-gtk-2.0 libarchive-cpio-perl libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev
libexpat1-dev libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libgtk2.0-dev libice-dev libltdl-dev libmail-sendmail-perl libpango1.0-dev
libpixman-1-dev libpng-dev libpng-tools libpthread-stubs0-dev libsigsegv2 libsm-dev libsys-hostname-long-perl libtool libx11-dev libx11-doc libxau-dev libxcb-render0-dev
libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxml2-utils libxrandr-dev
libxrender-dev m4 po-debconf x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-xext-dev
x11proto-xinerama-dev xorg-sgml-doctools xtrans-dev
升级了 0 个软件包,新安装了 61 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 14.5 MB 的归档。
解压缩后会消耗 65.4 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
3. 安装glib2.0
sudo apt-get install libgtk2.0-dev
root@ipanel:/usr/lib# apt-get install libgtk2.0-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
gir1.2-goa-1.0 gir1.2-snapd-1
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gir1.2-gtk-2.0 libarchive-cpio-perl libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev
libexpat1-dev libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libice-dev libltdl-dev libmail-sendmail-perl libpango1.0-dev libpixman-1-dev
libpng-dev libpng-tools libpthread-stubs0-dev libsigsegv2 libsm-dev libsys-hostname-long-perl libtool libx11-dev libx11-doc libxau-dev libxcb-render0-dev libxcb-shm0-dev libxcb1-dev
libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxml2-utils libxrandr-dev libxrender-dev m4 po-debconf
x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-xext-dev x11proto-xinerama-dev
xorg-sgml-doctools xtrans-dev
建议安装:
autoconf-archive gnu-standards autoconf-doc dh-make dwz libcairo2-doc libgtk2.0-doc libice-doc libtool-doc libpango1.0-doc libsm-doc gfortran | fortran95-compiler gcj-jdk libxcb-doc
libxext-doc m4-doc libmail-box-perl
下列【新】软件包将被安装:
autoconf automake autopoint autotools-dev debhelper dh-autoreconf dh-strip-nondeterminism gir1.2-gtk-2.0 libarchive-cpio-perl libatk1.0-dev libcairo-script-interpreter2 libcairo2-dev
libexpat1-dev libfile-stripnondeterminism-perl libfontconfig1-dev libfreetype6-dev libgdk-pixbuf2.0-dev libgtk2.0-dev libice-dev libltdl-dev libmail-sendmail-perl libpango1.0-dev
libpixman-1-dev libpng-dev libpng-tools libpthread-stubs0-dev libsigsegv2 libsm-dev libsys-hostname-long-perl libtool libx11-dev libx11-doc libxau-dev libxcb-render0-dev
libxcb-shm0-dev libxcb1-dev libxcomposite-dev libxcursor-dev libxdamage-dev libxdmcp-dev libxext-dev libxfixes-dev libxft-dev libxi-dev libxinerama-dev libxml2-utils libxrandr-dev
libxrender-dev m4 po-debconf x11proto-composite-dev x11proto-core-dev x11proto-damage-dev x11proto-dev x11proto-fixes-dev x11proto-input-dev x11proto-randr-dev x11proto-xext-dev
x11proto-xinerama-dev xorg-sgml-doctools xtrans-dev
升级了 0 个软件包,新安装了 61 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 14.5 MB 的归档。
解压缩后会消耗 65.4 MB 的额外空间。
您希望继续执行吗? [Y/n] Y
4. 安装dbus-glib
root@ipanel:/usr/lib# apt-get install libdbus-glib-1-dev
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
gir1.2-goa-1.0 gir1.2-snapd-1
使用'apt autoremove'来卸载它(它们)。
将会同时安装下列软件:
libdbus-1-dev
下列【新】软件包将被安装:
libdbus-1-dev libdbus-glib-1-dev
升级了 0 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 1 个软件包未被升级。
需要下载 261 kB 的归档。
解压缩后会消耗 1,467 kB 的额外空间。
您希望继续执行吗? [Y/n] Y
安装完成后,即可在/usr/include/dbus-1.0/dbus目录下看到dbus各个头文件。
5. 拷贝.h到/usr/include/下
1 进入/usr/include下,将/usr/include/dbus-1.0/dbus文件夹复制到/usr/include下
#cp -rf /usr/include/dbus-1.0/dbus /usr/include/
2.将/usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h文件复制到
/usr/include/dbus下
#cp /usr/lib/x86_64-linux-gnu/dbus-1.0/include/dbus/dbus-arch-deps.h /usr/include/dbus/
3.将/usr/include/glib-2.0下所有文件及文件夹复制至/usr/include/下
#cp -rf /usr/include/glib-2.0/* /usr/include/
4.将/usr/lib/x86_64-linux-gnu/glib-2.0/include下glibconfig.h复制到/usr/include/下
#cp /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h /usr/include/
然后就可以编写测试程序,调试对应接口逻辑。
#include<stdio.h>
#include <glib.h>
#include <glib/gprintf.h>
int g_printf_test( void )
{
g_printf( "gprintf log out\n" );
return 0;
}
void test_slist_1(void)
{
g_printf("====%s start========\n",__FUNCTION__);
GSList *slist = NULL;//定义两个GSList类型的链表指针
GSList *st;
gint nums[10] = {0,1,2,3,4,5,6,7,8,9};//定义gint类型的数组,从0到9
gint i;
for (i = 0; i < 10; i++)
{
slist = g_slist_append(slist, &nums[i]);//将数组中的数据尾插到链表中
}
g_printf("The result should be: 0,1,2,3,4,5,6,7,8,9\n");
g_printf("Begin:\n");
for (i = 0; i < 10; i++) {
st = g_slist_nth(slist, i);//得到链表中i位置的元素,Gets the element at the given position in a GSList.
g_printf("%d,", *(gint*)st->data);
}
g_printf("\nDone\n");
// GSList* g_slist_reverse(GSList *list);
slist = g_slist_reverse(slist);//翻转链表
g_printf("The result should be: 9,8,7,6,5,4,3,2,1,0\n");
g_printf("Begin:\n");
for (i = 0; i < 10; i++) {
st = g_slist_nth(slist, i);
g_printf("%d,", *(gint*)st->data);
}
g_printf("\nDone\n");
for (i = 0; i < 10; i++)
// GSList* g_slist_prepend(GSList *list, gpointer data);
slist = g_slist_prepend(slist, &nums[i]);//头插入链表
g_printf("The result should be: 9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0\n");
g_printf("Begin:\n");
for (i = 0; i < 20; i++) {
st = g_slist_nth(slist, i);
g_printf("%d,", *(gint*)st->data);
}
g_printf("\nDone\n");
g_slist_free(slist);//注意要释放链表
g_printf("====%s end========\n",__FUNCTION__);
}
int main(int argc,char *argv[])
{
printf("this is a main function\n");
g_printf_test();
test_slist_1();
return 0;
}
编译:
#gcc -o glib_test main.c -lglib-2.0