cygwin编译netcat 0.7.1生成.exe文件

1. 准备环境

首先,到www.cygwin.com下载cygwin的安装程序setup-x86_64.exe(或setup-x86.exe),之后安装提示一路确定即可,注意默认情况下,cygwin中是不含gcc、make、patch等常用工具的,需要额外安装,方法可以参照以下链接中的方法,将gcc、make、patch下载到cygwin中:

http://www.cnblogs.com/aoaoblogs/archive/2012/10/31/2748712.html

http://hi.baidu.com/iwaters/item/328d05dde0cab3fd92a97406


netcat需要到http://netcat.sourceforge.net/来下载,使用的版本是0.7.1,并将下载的代码包拷贝到cygwin根目录下的home相应的用户名目录下。


2. 打patch

原生的netcat是在linux平台下工作的,某些数据结构有windows平台不一致,直接编译的话会报如下错误:

udphelper.c: 在函数‘udphelper_ancillary_read’中:
udphelper.c:90:42: 错误:‘struct in_pktinfo’没有名为‘ipi_spec_dst’的成员
  memcpy(&get_addr->sin_addr, &get_pktinfo->ipi_spec_dst,

这是因为in_pktinfo结构体在windows平台上跟linux平台上不同,在windows平台上没有ipi_spec_dst这一项,cygwin为了跟windows兼容,相应的数据结构中也没有这一项。


对于这个问题,解决的方法就是给netcat代码打patch ,下载patch的url在http://sourceforge.net/p/netcat/bugs/50/

将patch拷贝到cygwin中netcat的目录外,执行

patch -p0 < netcat-cygwin.patch

注意,如果没有patch这个命令,可以参照安装gcc的方法安装patch命令(patch也在devel子项中)


3. configure

进入netcat目录,执行./configure,之后会提示出错:configure: error: cannot guess build type; you must specify one

改用./configure --build="i686"


4. 编译

直接运行make命令,会出现如下问题:

/home/Lenovo/netcat-0.7.1/src/core.c:225:对‘udphelper_ancillary_read’未定义的引用
/home/Lenovo/netcat-0.7.1/src/core.c:225:(.text+0x3cb): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `udphelper_ancillary_read'
collect2: 错误:ld 返回 1

通过修改src/core.c文件,在其中加入:

#include "proto.h"

这个错误的原因是,core.c使用了udphelper_ancillary_read函数,而这个函数在proto.h中声明的,但是core.c并没有引用proto.h

重新输入make,完成编译,在netcat-0.7.1/src目录下生成netcat.exe文件,但是这个exe执行时会报错“没有找到cygwin1.dll”,解决的方法是将cygwin1.dll与这个exe放在同一目录下,或者将cygwin1.dll放到系统目录比如windows/system32中,或者将cygwin1.dll的路径加入到环境变量。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值