我正在尝试在Raspberry pi上安装AODV协议。当我尝试执行“ make”时,从“ https://github.com/erimatnor/aodv-uu”完成git clone之后,出现以下错误。期待您的建议。谢谢!
使
gcc -Wall -O3 -g -DDEBUG -DCONFIG_GATEWAY -DDEBUG -o aodvd main.o list.o debug.o timer_queue.o aodv_socket.o aodv_hello.o aodv_neighbor.o aodv_timeout.o routing_table.o seek_list.o aodv_rreq。 .o aodv_rerr.o nl.o locality.o
aodv_neighbor.o:在函数neighbor_add': /home/pi/aodv-uu/aodv_neighbor.c:68: undefined reference to
hello_update_timeout'中
aodv_timeout.o:在函数route_discovery_timeout': /home/pi/aodv-uu/aodv_timeout.c:98: undefined reference to
rt_table_update_timeout'中
aodv_rreq.o:在函数rreq_route_discovery': /home/pi/aodv-uu/aodv_rreq.c:460: undefined reference to
rt_table_update_timeout'中
aodv_rreq.o:在函数rreq_local_repair': /home/pi/aodv-uu/aodv_rreq.c:521: undefined reference to
rt_table_update_timeout'中
aodv_rrep.o:在函数rrep_forward': /home/pi/aodv-uu/aodv_rrep.c:231: undefined reference to
rt_table_update_timeout'中
nl.o:在函数nl_kaodv_callback': /home/pi/aodv-uu/nl.c:282: undefined reference to
rt_table_update_timeout'中
collect2:错误:ld返回1退出状态
Makefile:112:目标“ aodvd”的配方失败
make:*** [aodvd]错误1
最佳答案
sourceforge提供的代码与github上的代码相同。如果下载了归档文件,您会看到任何文件的最新修改日期都是2010年。考虑到这段代码的使用期限,发现事情不再起作用了,我不会感到惊讶。
但是,这是解决您问题的快速解决方法。根本原因似乎是问题函数(例如rt_table_update_timeout
)被声明为inline
,但是该信息似乎在构建过程中的某个位置丢失了,因此其他目标文件试图将它们引用为非内联函数。 。
您可以通过打开defs.h
并查找以下行来避免这种情况:
#define NS_INLINE inline
并替换为:
#define NS_INLINE
这将允许
aodvd
正确编译(make aodvd
)。在我的系统上,内核模块随后将无法编译:cc1: fatal error: /lib/modules/4.13.15-100.fc25.x86_64/build/include/linux/modversions.h: No such file or directory
据我所知,
modversions.h
文件不再由现代Linux内核生成。