VS2017编译SNMP++记录

一、下载编译SNMP++库要使用的相关文件


1、下载地址:https://www.agentpp.com/download.html

共三个压缩文件:SNMP++库文件、SNMP v3加密要用到的libdes库、vs2013工程用于编译SNMP相关库

2、将三个压缩文件放到同一文件夹中,都解压到当前目录下。(如果点击SNMP++/VS2013/SNMP++/SNMP++.sln,然后生成文件,你会发现各种找不到,原来装放源代码的文件夹SNMP++/SNMP++-3.3.4是有版本号,而工程文件的配置文件中没有版本号,所以得把版本号去掉,即修改为snmp++)

 vs2013目录中包括4个文件夹AGENT++、AgentX++、libdes、SNMP++分别对应用于编译4个库的解决方案。

其中AGENT++、AgentX++可能是用于编译代理使用的库,本文不做介绍。

libdes用于编译SNMP++会使用的libdes库,直接打开文件夹中的解决方案文件libdes.sln进行编译即可(在debug目录中有生成的.lib文件),没有编译错误,本文也不做详细介绍。
修改snmp++-3.3.11文件夹为snmp++

二、编译SNMP库

由于工程文件是vs2013,本机使用的是vs2017,所以在打开\vs2017\SNMP++\SNMP++.sln时,对项目进行重定向操作

开始编译

1.尝试一下生成 SNMP++(出错了,提示找不到 libsnmp.h)

在项目“属性 -> C/C++ -> 常规–> 附加包含目录”中添加以下目录:

$(SolutionDir)\..\..\snmp++\include

$(SolutionDir)\..\..\snmp++

$(SolutionDir)\..\..\libdes

这里使用代表工程路径的宏“$(SolutionDir)”,不使用绝对路径,避免移动工程后无法编译。

2.再次生成

提示编译libsnmp.h文件时发生错误,无法打开包括文件“unistd.h”。

仔细对比一下发现报错的libsnmp.h文件是在库目录\snmp++下,而工程目录\vs2017\SNMP++\include下还有一个libsnmp.h文件,既然vs工程目录中已有libsnmp.h文件,那就用\vs2017\SNMP++\include\libsnmp.h覆盖一下\snmp++\libsnmp.h,同时在VS的“解决方案资源管理器”的头文件列表中移除原libsnmp.h(实际双击会提示无法打开文件),重新添加\snmp++\libsnmp.h文件。
 

类似的再次生成后会报错:无法打开包括文件“config.h”。

此文件在vs工程目录vs2017\SNMP++\include下,而之前在附加包含目录中添加的三个目录中没有此目录,直接把vs2017\SNMP++\include\config.h文件复制到与vs2017同级的\snmp++目录下,同时在VS的“解决方案资源管理器”的头文件列表中移除原config.h(解决方案中已添加的是vs2017\SNMP++\include\config.h),重新添加\snmp++\config.h文件。

3.继续尝试编译SNMP项目

出现了一堆错误,观察下,主要错误有三个

pp_int64  转化警告

发现只有一处使用到了这种类型,所以暂且忽略这个警告

inet_ntop 重定义

定位到具体文件中,将其注释掉

'inet_ntoa': Use inet_ntop() or InetNtop() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings SNMP++ 

这个提示是 inet_ntoa 过期了,可以用 inet_ntop 或 InetNtop 代替,为了避免修改源码,我们按后面的提示,在工程属性里加 【_WINSOCK_DEPRECATED_NO_WARNINGS 】预编译项

在“配置属性 -> C/C++ -> 预处理器–> 预处理器定义”中添加宏_WINSOCK_DEPRECATED_NO_WARNINGS

4.再次生成,出现较多错误

定位错误“无法打开包括文件openssl/des.h”

当定义了_USE_OPENSSL宏才包含openssl/des.h文件,查找_USE_OPENSSL宏,在config_snmp_pp.h文件中定义。注意:有两个config_snmp_pp.h文件,一个在库目录下\snmp++\include\snmp_pp,一个在VS工程目录下\vs2017\SNMP++\include\snmp_pp,我们先按\vs2017\README.win32文件中描述的那样,用\vs2017\SNMP++\include\snmp_pp\config_snmp_pp.h文件覆盖一下\snmp++\include\snmp_pp\config_snmp_pp.h文件,同时在VS的“解决方案资源管理器”的头文件列表中移除原config_snmp_pp.h,重新添加\snmp++\include\snmp_pp\config_snmp_pp.h文件
 

5.再次编译

找不到标识符“pp_int64”,搜索发现整个工程目录中没有此标识符,但是在config_snmp_pp.h文件中有“pp_uint64”的定义,会不会在被覆盖掉的config_snmp_pp.h(原snmp++库目录\snmp++\include\snmp_pp下的)文件中呢?

重新从压缩包snmp++-3.3.11a.tar.gz中解压config_snmp_pp.h文件,果然找到了“pp_int64”的定义,与README.win32文件中描述的恰恰相反,还是应该使用snmp库自带的config_snmp_pp.h文件,重新覆盖此文件至\snmp++\include\snmp_pp目录。

6.继续编译,仍然失败,回到了之前的错误

因为使用的是libdes库,从74行开始修改config_snmp_pp.h文件,如下:

#if 0

#define HAVE_LIBSSL 1

#endif

#if 0

#define HAVE_LIBTOMCRYPT 1

#endif

#if 1

#define HAVE_LIBDES 1

#endif

#if 0

#define HAVE_PTHREAD 1

#endif

7.编译成功

8.添加测试项目【vs2017\SNMP++\snmpWalk\snmpWalk.vcxproj】,并设置为启动项,修改VC++目录

9.或创建新的测试样例

vs创建windows控制台应用程序

修改项目属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值