这两天开始搞网络课程设计,要用到libnet去构造数据包。又因为是做某个网络游戏的分析,所以得在windows下面做。
于是开始倒腾。
先从sourceforge上下载了libnet 0.10.11版,用于Windows的是个zip包,然后解压出来放桌面上。
在几个文件夹里翻翻,看了看readme,发现丫居然要手动编译。还好已经有批处理写好了直接用就行。
按照readme里面的说法,我把batfiles/msvcmake.bat复制到../里面,然后双击运行。
报错:
cl 不是内部或外部命令,也不是可运行的程序或批处理文件。
这个错误再正常不过了,环境变量没设置好。。
打开计算机-属性-高级系统设置-环境变量,在用户变量的PATH里加上F:\Visual Studio 9.0\VC\bin。
再执行,错误一堆,全是找不到头文件的错误。
头文件应该是放在哪个环境变量里面呢?这个问题在windows里面我还真不知道,经过一番搜索,原来要新建一个include环境变量和一个lib环境变量。include环境变量里面放F:\Visual Studio 9.0\VC\include,lib里面放F:\Visual Studio 9.0\VC\lib(废话)
然后再编译,又找不到某个头文件了。是Windows.h找不到。Windows.h又在哪里?这个问题真心蛋疼。后来想出一个妙招,打开VS,新建一个工程,输入#include <windows.h>,然后把光标移动到<windows.h>里面,在上面的提示栏立刻出来了:
好,把这个值(C:\Program Files\Microsoft SDKs\Windows\v6.0A\include)加入到include环境变量中。同理要在lib环境变量中加入C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib。
编译通过,在lib目录中生成了libnet.lib,好,把它放到F:\Visual Studio 9.0\VC\lib中,然后把include目录的libnet.h放到F:\Visual Studio 9.0\VC\include中(也是废话)。
在VS中新建工程,尝试使用test中的代码进行测试。
结果编译报错,报了一堆link错误,估计又是找不到库了。折腾了半天不知道怎么改,后来在libnet源码的batfiles的目录中的exe.bat中找到了救命稻草:
cl /DTARGET_MSVC /MD /O2 /nologo /I../include %1.c ../lib/libnet.lib wsock32.lib |
估计就是链接的时候需要额外指定库文件。
在程序中加入
1 2 |
#pragma comment(lib,"libnet.lib") #pragma comment(lib,"wsock32.lib") |
即可。
终于搞定了。