静态编译ncat时出现nsock依赖报错,更换VS版本仍未解决
静态编译ncat nsock模块MSVC报错排查方案
你遇到的三个报错均为MSVC原生语法类报错,对应官方定义如下:
- C4430:缺少类型说明符,默认假定为int,C++标准不支持该隐式规则
- C2143:语法错误,指定标记前缺少必要符号(多为分号、括号或头文件定义缺失)
- C2238:指定标记前存在不可识别的语法结构
可按照以下步骤逐一排查:
- 调整头文件引入顺序,将
winsock2.h的引入代码放在所有Windows系统头文件之前,避免和windows.h内置的旧版winsock定义冲突,该冲突是触发上述三类报错的最常见原因。 - 确认使用的ncat源码版本和教程适配,较新的nmap源码包中的nsock模块已经加入了POSIX平台专属语法,未做Windows编译兼容,可尝试切换到nmap 7.91版本源码再重试编译。
- 核对VS2019的编译配置是否符合静态编译要求:
- 打开项目属性页->C/C++->代码生成->运行库,需选择
/MT(Release模式)或/MTd(Debug模式),禁止使用MD系列动态运行库选项 - 打开项目属性页->常规->平台工具集,确认已切换为
v142,不要使用v142_xp或其他变种工具集
- 打开项目属性页->C/C++->代码生成->运行库,需选择
- 检查链接器输入配置,静态编译场景需要额外将
ws2_32.lib、iphlpapi.lib两个系统库添加到附加依赖项列表。
内容的提问来源于stack exchange,提问作者z3nth10n
相关产品推荐
相关产品推荐

