gpt4 book ai didi

c - 使用 C 开始使用 wpa_supplicant

转载 作者:太空狗 更新时间:2023-10-29 12:26:35 34 4
gpt4 key购买 nike

在人们得出结论说这是重复的帖子之前,我想指出我已经浏览了关于该主题的其他帖子,但确实没有找到解决方案。


我需要什么

我的目标是从 C 程序访问 wpa_supplicant 以执行以下操作:

  1. 查看事件连接
  2. 检测接口(interface)何时出现故障
  3. 连接到 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”错误的 undefined reference

    #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:更正拼写错误并添加构建日志

最佳答案

这个答案来得太晚了,OP 找不到有用的东西,但也许它会帮助其他遇到同样问题的人。

在wpa_supplicant-2.9中,你不需要用你自己的源文件编译wpa_ctrl.c。相反,首先从 wpa_supplicant 源构建 libwpa_client.so(或 libwpa_client.a):$make -C wpa_supplicant libwpa_client.so

然后,链接共享库以构建您自己的程序。您还需要添加包含路径。例如)$gcc main.c -Iwpa_supplicant-2.9/src/common -I.wpa_supplicant2-9/src/utils -lwpa_client

关于c - 使用 C 开始使用 wpa_supplicant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215480/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com