【发布时间】:2016-11-08 00:02:36
【问题描述】:
在人们妄下结论说这是重复的帖子之前,我想指出我已经浏览了有关此主题的其他帖子,但确实没有找到解决方案。
我需要什么
我的目标是从 C 程序访问 wpa_supplicant 以执行以下操作:
- 查看活动连接
- 检测接口何时关闭
- 连接AP/设置AP等
我发现了什么
- 如果我需要编写一个 C 程序来与 wpa_supplicant 通信,我不需要 DBus
- 只需将这些文件包含在我的项目目录中,我就可以使用
wpa_ctrl.h中的功能 - 以下是我找到的与此问题相关的一些链接。 1, 2, 3
- 我还浏览了official documentation,它讨论了使用
wpa_ctrl.c的外部程序
为什么上述方法并不能真正解决问题
- 我在 SO 和其他相关网站上找到的大多数关于此问题的帖子都指向官方文档等资源,这些资源很好但不能解决问题
- 在许多此类帖子中,人们已经放弃了这一点,或者已经制定了解决方案,但尚未将其发布到网上。
- 对于本主题的新手,如果可以发布一个工作示例——wpa_supplicant 的“hello world”,将会很有帮助。
到目前为止我做了什么
-
从this 链接,我将
wpa_supplicant-2.5/src/common/wpa_ctrl.h复制到wpa_supplicant-2.5/src/utils目录中(因为common.h有很多依赖项)。然后我在同一目录中编写了一个简单的 C 程序hostapd_cli.c,如下所示。 我收到未定义的“wpa_ctrl_open”引用错误#include "includes.h" #include <dirent.h> #include "wpa_ctrl.h" #include "common.h" static struct wpa_ctrl *ctrl_conn; static int hostapd_cli_quit = 0; static int hostapd_cli_attached = 0; static const char *ctrl_iface_dir = "/var/run/wpa_supplicant"; static char *ctrl_ifname = NULL; static int ping_interval = 5; int main() { ctrl_conn = wpa_ctrl_open(ctrl_iface_dir); if (!ctrl_conn){ printf("Could not get ctrl interface!\n"); return -1; } return 0; }
生成文件
C=gcc
CFLAGS=-lpthread
DEPS = includes.h wpa_ctrl.h common.h
OBJ = wpa_ctrl.o hostapd_cli.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
main: $(OBJ)
gcc -o $@ $^ $(CFLAGS)
.PHONY: clean
clean:
rm -f *.o *~ core $(INCDIR)/*~
构建日志
gcc -o main wpa_ctrl.o hostapd_cli.o -lpthread
hostapd_cli.o: In function `main':
hostapd_cli.c:(.text+0xf): undefined reference to `wpa_ctrl_open'
collect2: error: ld returned 1 exit status
Makefile:10: recipe for target 'main' failed
make: *** [main] Error 1
关于如何使用这些文件并将其集成到外部项目或如何编译它的材料不多,我有点无能为力。任何有关如何进行的帮助将不胜感激。
编辑 1:更正错字并添加构建日志
【问题讨论】:
-
来自您链接的官方文档,参考
wpa_ctrl.c:“外部程序可以将此文件链接到其中”。也就是说,您需要复制该文件,对其进行编译并将其链接到您的程序中。 -
这是否意味着,在我的 makefile 中我添加了 wpa_ctrl.c?在我的makefile中,OBJ = wpa_ctrl.c testProg.c
-
是的。除了它应该列出
.o文件而不是.c文件。 -
是的。对不起,那是一个错字。包含正确的
.o文件仍然会产生同样的错误。 -
也许你的 Makeifile 还是有问题。如果您需要帮助,则需要显示更新后的 Makefile 和构建日志。
标签: c linux wpa-supplicant