相关疑难解决方法(0)

C中的D-Bus教程与wpa_supplicant进行通信

我正在尝试编写一些代码来使用DBUS与wpa_supplicant进行通信.当我在嵌入式系统(ARM)中工作时,我想避免使用Python或GLib.我想知道我是不是很愚蠢,因为我真的觉得没有关于D-Bus的清晰文档.即使使用官方文档,我发现文档的级别太高,或者显示的示例都使用了Glib!我看过的文档:http://www.freedesktop.org/wiki/Software/dbus

我发现了一篇关于在C中使用D-Bus的好文章:http://www.matthew.ath.cx/articles/dbus

但是,这篇文章已经很老了,还不够完整!我也找到了c ++ - dbus API,但在这里,我找不到任何文档!我一直在深入研究wpa_supplicant和NetworkManager源代码,但这真是一场噩梦!我一直在研究"低级D-Bus API",但这并没有告诉我如何从D-Bus消息中提取字符串参数!http://dbus.freedesktop.org/doc/api/html/index.html

下面是我编写的一些代码来测试,但我真的很难提取字符串值.很抱歉有很长的源代码,但如果有人想尝试...我的D-Bus配置似乎很好,因为它"已经"从wpa_supplicant捕获"StateChanged"信号,但无法打印状态:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>

#include <dbus/dbus.h>

//#include "wpa_supp_dbus.h"
/* Content of wpa_supp_dbus.h */
#define WPAS_DBUS_SERVICE   "fi.epitest.hostap.WPASupplicant"
#define WPAS_DBUS_PATH      "/fi/epitest/hostap/WPASupplicant"
#define WPAS_DBUS_INTERFACE "fi.epitest.hostap.WPASupplicant"

#define WPAS_DBUS_PATH_INTERFACES   WPAS_DBUS_PATH "/Interfaces"
#define WPAS_DBUS_IFACE_INTERFACE   WPAS_DBUS_INTERFACE ".Interface"

#define WPAS_DBUS_NETWORKS_PART "Networks"
#define WPAS_DBUS_IFACE_NETWORK WPAS_DBUS_INTERFACE ".Network"

#define WPAS_DBUS_BSSIDS_PART   "BSSIDs"
#define WPAS_DBUS_IFACE_BSSID   WPAS_DBUS_INTERFACE ".BSSID"

int running = 1;

void stopLoop(int sig)
{
    running = 0;
}

void sendScan() …
Run Code Online (Sandbox Code Playgroud)

linux embedded dbus

17
推荐指数
2
解决办法
2万
查看次数

在我的C ++ OpenFrameworks项目中对wpa_ctrl函数的未定义引用。需要帮助集成此C库

我正在使用菜单选项来连接到使用OpenFrameworks构建的C ++应用程序中的wifi。我想使用wpa_ctrl库,但无法编译。

程式码片段:

NetworkWrapper.h:

#ifndef NETWORKWRAPPER_H_
#define NETWORKWRAPPER_H_

class NetworkWrapper {
public:
     NetworkWrapper():
private:
     struct wpa_ctrl* m_ctrl;
};
#endif
Run Code Online (Sandbox Code Playgroud)

NetworkWrapper.cpp:

#include "NetworkWrapper.h"
extern "C" {
     #include "wpa_ctrl.h"
}

NetworkWrapper::NetworkWrapper() {
     m_ctrl = wpa_ctrl_open("wlan0");
}
Run Code Online (Sandbox Code Playgroud)

错误:

***/NetworkWrapper.cpp:7: undefined reference to `wpa_ctrl_open'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我试过抛出include并使用和不使用extern“ C”,但是看到wpa_ctrl.h也包含在extern“ C”标签中没有什么区别,尽管使用#ifdef __cplusplus(已定义,我将选中)。

我现在几乎没有主意了。我应该注意,我尝试将wpa_ctrl.c包含在外部的“ C”标记中,据我所知,不应将其编译(?)。这也给出了完全相同的结果。这导致我手动编译wpa_ctrl库并将其复制到obj目录,但再次出现:同样的结果。

感谢您抽出宝贵的时间阅读我的问题,希望对您有所帮助!

*编辑* 根据请求,我的链接选项(我将其修剪了一下):

g ++ -o bin / application_debug obj / linux64 / Debug / src / main.o [...] obj / linux64 / Debug / …

c c++ network-programming openframeworks

1
推荐指数
1
解决办法
731
查看次数

标签 统计

c ×1

c++ ×1

dbus ×1

embedded ×1

linux ×1

network-programming ×1

openframeworks ×1