visual studio 2008编译libnids的问题

本文详细介绍如何在Visual Studio 2008环境下配置libnids库进行网络行为审计,包括环境变量设置、项目配置、解决常见编译错误等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没有开发c++程序了,感觉很不适应。

由于需要审计网络的行为,所以找了一个libnids的demo,在visual studio 2008下编译,感觉很不习惯,对工具也不熟悉,花了一天时间在别人的帮忙下终于编译通过了,再次记录一下。

visual studio 2008环境配置。后面都简称vs9.

在开发的时候,首先是想到的是要配置环境变量,比如引用那些类库,引用哪些头文件等等。

在vs里面有两个地方可以配置:

1、全局配置:工具-》选项-》项目和解决方案-》vc++ 目录右边有一个下拉列表,包括可执行文件,包含文件,库文件等等,在里面添加就可以了。

2、项目配置:项目->属性->配置属性->链接器->常规->附加库目录


理解解决方案和项目的区别:

对这部分内容我也琢磨了一会,解决方案可以理解为一个大的工程,里面可以分为多个可执行的模块,或者是链接库。这些内容在一个解决方案里面体现,比较好直观的展示项目的内容。


好,现在还是讲引用libnids产生的问题了。

1、预处理:项目->属性->配置属性-》c/c++-》预处理器-》预处理器定义:写上WIN32;_DEBUG;_CONSOLE。

2、项目包含的lib库,和上面的配置的区别是,上面的配置表示编译器可以找到位置,这里的配置是此项目需要的lib库,位置在项目->属性->配置属性->链接器->输入

附加依赖项:libnids.libwpcap.liblibnids-debug.liblibpcap.libws2_32.lib

还要在忽略特定库里面写上:LIBCMT.lib,不然编译会包:LIBCMT.lib(close.obj) : error LNK2005: __close已经在LIBCD.lib(close.obj)中定义

Libcd.libDEBUG版本libc.libRelease版本得


还需要在cpp里面的include下面添加:

extern "C" { FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};}

否则会提示:unresolved external symbol __iob


忽略libcmt.lib he extern "c" 这两个地方的配置后来研究和编译的方式有关系。

在mfc的使用中选择 :静态库中使用MFC就可以了。


原理:

VS2008,项目——属性——配置属性——C/C++——代码生成:他有/MT,/MTd,/Md,/MDd四个选项,你必须让所有使用的库都使用相同的配置,否则就会有相应的提示,甚至可能会出现无法解析的函数。有时我们使用的库不是自己可以控制的,那么就只能把工程属性设置成河你使用的库相同的选项。

通常用多线程调试MTd。

错误1 error LNK2005: _free 已经在 libcmtd.lib(dbgheap.obj) 中定义 MSVCRT.lib

错误2error LNK2005: _malloc 已经在 libcmtd.lib(dbgheap.obj) 中定义 MSVCRT.lib

如果有一堆的重定义错误发生在同一个lib中,而且跟它冲突的也是同一个lib,那么这个两个lib的功能应该是一样的,可以2选一,只要在“忽略特定的库”内填入需要忽略的库。

项目属性-配置属性-链接器-输入-忽略特定的库:libcmtd.lib

详见:http://blog.youkuaiyun.com/pgmsoul/article/details/4203941


错误例子及分析:

error LNK2019:无法解析的外部符号_inet_ntoa@4,该符号在函数_adres中被引用

表示缺少ws2_32.lib

libnids.lib(libnids.obj):errorLNK2019:无法解析的外部符号_pcap_datalink,该符号在函数_nids_init中被引用

表示缺少wpcap.lib

error LNK2019:无法解析的外部符号_nids_run,该符号在函数_main中被引用

表示缺少libnids.lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值