一、环境说明
1.编译器:VS2013
2.系统WIN7
二、编译
1.在libnet的源码目录下新建一个lib的静态库工程如下图
2.将libnet的源码添加到工程中,参考工程中的msvcbuild.bat中的内容移除不必要的源码文件。
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的声明提到函数块的头部。