libnet windows下编译,出错与解决办法

时间:2023-01-25 14:51:14

一、环境说明

1.编译器:VS2013

2.系统WIN7

二、编译

1.在libnet的源码目录下新建一个lib的静态库工程如下图

libnet windows下编译,出错与解决办法

2.将libnet的源码添加到工程中,参考工程中的msvcbuild.bat中的内容移除不必要的源码文件。

libnet windows下编译,出错与解决办法

3.此时编译还会出现如下错误

1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(204): error C2275: “uint8_t”: 将此类型用作表达式非法
1> e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\include\libnet\stdint.h(85) : 参见“uint8_t”的声明
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(204): error C2146: 语法错误: 缺少“;”(在标识符“ip_nh”的前面)
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(204): error C2065: “ip_nh”: 未声明的标识符
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(217): error C2065: “ip_nh”: 未声明的标识符
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(220): error C2065: “ip_nh”: 未声明的标识符
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(239): error C2065: “ip_nh”: 未声明的标识符
1>e:\work_proc\shy_redirect\deps\libnet-libnet-1.2-rc3\libnet\src\libnet_checksum.c(244): error C2065: “ip_nh”: 未声明的标识符

解决办法为:

找到ip_nh变量的定义。代码如下:

ip6h_p = (struct libnet_ipv6_hdr *)iph_p;
iph_p = NULL;
ip_hl = 40;
uint8_t ip_nh = ip6h_p->ip_nh;

修改为:

uint8_t ip_nh;
ip6h_p = (struct libnet_ipv6_hdr *)iph_p;
iph_p = NULL;
ip_hl = 40;
ip_nh = ip6h_p->ip_nh;


这个错误是由于c的编译器要求将变量的申明放在一个函数块的头部,而c++没有这样的要求造成的。所以我们需要修改,将ip_nh的声明提到函数块的头部。