我正在尝试在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内核生成。

09-27 15:38