openwrt自编译iwinfo
获取iwinfo
https://github.com/MinimSecure/iwinfo-lite
这里获取的是简化版的,去掉了ubus和uci的
编译过程
-
先执行一次自带的makefile的编译
make
-
使用以下编译自己写的c文件
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o a.o a.c cc -o a a.o -L. -liwinfo
-
然后执行
Bug
- 在ubuntu本机上,正常运行,在wrt上运行结果都是unknown。但运行make编译出来的iwinfo是正常的结果
Debug
修改编译过程:
make
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o a.o a.c
cc -o a a.o -L. -liwinfo
Q
gdb如何调试带参数的程序
- 先使用gdb进入调试模式
- 使用命令
set args
设置参数,可以设置多个
gdb a.out
> set args wlp3s0
gdb无法设置断点
问题:尝试在a.c文件的33行处设置断点,提示如下:
没有符号表被读取。请使用 "file" 命令。
其原因是生成的二进制可执行文件没有使用-g选项。
解决:在编译时加上参数-g
cc -g -Iinclude a.c iwinfo_utils.o iwinfo_wext.o iwinfo_wext_scan.o iwinfo_lib.o
提示cc command not found
- 安装gcc
- 做个cc连接到gcc
cd /usr/bin
ln -s gcc cc
make编译结果
rm -f *.o libiwinfo.so iwinfo
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o iwinfo_utils.o iwinfo_utils.c
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o iwinfo_wext.o iwinfo_wext.c
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o iwinfo_wext_scan.o iwinfo_wext_scan.c
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o iwinfo_lib.o iwinfo_lib.c
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o iwinfo_cli.o iwinfo_cli.c
cc -o libiwinfo.so iwinfo_utils.o iwinfo_wext.o iwinfo_wext_scan.o iwinfo_lib.o -shared
cc -o iwinfo iwinfo_cli.o -L. -liwinfo
cc -g -Iinclude a.c iwinfo_utils.o iwinfo_wext.o iwinfo_wext_scan.o iwinfo_lib.o iwinfo_nl80211.o
cc -g -Iinclude a.c iwinfo_utils.o iwinfo_wext.o iwinfo_wext_scan.o iwinfo_lib.o iwinfo_nl80211.o -lnl-3 -lnl-genl-3
cc -std=gnu99 -fstrict-aliasing -Iinclude -fPIC -c -o a.o a.c
cc -o a a.o -L. -liwinfo