これは重複した投稿であると人々が結論に飛びつく前に、このトピックに関する他の投稿を調べましたが、実際には解決策が見つからなかったことを指摘したいと思います.
必要なもの
私の目標は、C プログラムから wpa_supplicant にアクセスして、次のことを行うことです。
- アクティブな接続を確認する
- インターフェースがいつダウンしたかを検出する
- AP への接続/AP のセットアップなど
わかったこと
- wpa_supplicant と通信する C プログラムを作成する必要がある場合、DBus は必要ありません。
wpa_ctrl.h
これらのファイルをプロジェクト ディレクトリに含めるだけで、関数を利用できます。- この質問に関連して見つけたいくつかのリンクを次に示します。1、2、3 _ _ _ _
- を使用した外部プログラムについて説明している公式ドキュメントも確認しました
wpa_ctrl.c
上記が実際に問題を解決しない理由
- この問題に関してSOやその他の関連Webサイトで見つけた投稿のほとんどは、公式ドキュメントなどのリソースを指していますが、これは良いが問題を解決していません
- これらの投稿の多くで、人々はこれを追求することをあきらめたか、解決策を考え出しましたが、オンラインに投稿していません.
- このトピックの初心者には、wpa_supplicant の「hello world」という実際の例を投稿していただけると助かります。
これまでに行ったこと
このリンク から、ディレクトリにコピー
wpa_supplicant-2.5/src/common/wpa_ctrl.h
しまし た(多くの依存関係があるため)。次に、以下に示す同じディレクトリに簡単な C プログラムを作成しました。「wpa_ctrl_open」エラーへの未定義の参照が表示されますwpa_supplicant-2.5/src/utils
common.h
hostapd_cli.c
#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: タイプミスを修正し、ビルド ログを追加しました