帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
服务器资讯 / 香港服务器租用 / 香港VPS租用 / 香港云服务器 / 美国服务器租用 / 台湾服务器租用 / 日本服务器租用 / 官方公告 / 帮助文档
window下编译安装net-snmp 5.9.3流程以及踩坑总结
发布时间:2024-03-07 08:33:10   分类:帮助文档
window下编译安装net-snmp 5.9.3流程以及踩坑总结




1.安装环境:
系统: window10家庭版平台: x86_64软件版本:
visual studio 2022
openssl:3.1.0
perl:5.36.0
net-snmp:5.9.3

2.下载、安装环境依赖
1.安装activatestate工具
官网为:https://www.activestate.com/products/platform/state-tool/ 安装命令为:powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/w19880w01/install.ps1')))" 在cmd中输入以上命令并执行,等待安装完成,过程可能较久;
2.安装perl工具 官网:https://platform.activestate.com/ 在官网注册登录后,选择perl并打开下载页面,复制生成的PowerShell命令,同样是在cmd中执行,等待安装完成。 3.安装visual studio 2022 ,这个不用详述了;
4.下载安装OpenSSL,参考地址 https://kb.firedaemon.com/support/solutions/articles/4000121705-firedaemon-openssl-1-1-1-binaries 下载ZIP压缩包并解压后,将其中的【ssl】文件夹和平台对应目录(x64)下【所有文件】复制到想要安装OpenSSL的路径(我的路径是C:\OpenSSL) 压缩包解压: 复制到安装目录后:
5.下载net-snmp源码包,下载地址 https://sourceforge.net/projects/net-snmp/files/latest/download 将源码包解压,进入系统对应目录(win32),此处为执行后续编译命令的路径。
3.编译net-snmp
1.进入vs2022编译环境:运行vcvars64.bat 可以在开始菜单找到此快捷方式
参考路径 C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build 运行后进入编译环境: 2.进入net-snmp编译路径: cd C:\xxxx\net-snmp-5.9.3\win32 3.修改源码中OpenSSL库命名:将win32\net-snmp目录下net-snmp-config.h和net-snmp-config.h.in两个文件中的libcrypto64MD.lib、libssl64MD.lib修改为libcrypto.lib、libssl.lib,如下图所示: 修改前: 修改后:
4.编译动态库,执行以下命令:
perl Configure --prefix=c:/usr --config=release --linktype=dynamic --with-ssl --with-sslincdir=c:/openssl/include --with-ssllibdir=c:/openssl/lib
nmake /nologo libs_clean
nmake /nologo libs

5.编译net-snmp,执行以下命令;
perl Configure --prefix=c:/usr --config=release --linktype=static --with-ssl --with-sslincdir=c:/openssl/include --with-ssllibdir=c:/openssl/lib
nmake /nologo clean
nmake /nologo

如果执行完以上命令没有出现报错中断,说明编译已经完成,执行以下命令完成安装;
nmake /nologo install

此时net-snmp就已安装到c:\usr目录下,进入c:\usr\bin目录即可执行snmpset、snmpget等方法
4.踩坑
4.1 build.bat编译问题
根据其他教程,执行win32目录下build.bat编译,先是提示Can't spawn "cmd.exe": No such file or directory,增加环境变量C:\System32未解决,最终手动复制了一个cmd.exe到win32目录下,解决此报错问题,但后续执行nmake相关行时又报错,clean.out显示DNS 服务器对区域没有权威。,最终放弃通过build.bat,转而根据build.pl内容,手动进行编译。
4.2 OpenSSL选项编译问题
在不编译OpenSSL相关选项时,使用以下命令可以简单完成编译
perl Configure --prefix=c:/usr --config=release --linktype=static
nmake /nologo clean
nmake /nologo

但是编译出来的工具不支持加密认证,若使用-a SHA/SHA-256等参数,则会打印Invalid authentication protocol specified after -3a flag: SHA-256 提示,此问题为未链接OpenSSL编译导致,解决方法:使用以下命令链接OpenSSL进行编译;
perl Configure --prefix=c:/usr --config=release --linktype=static --with-ssl --with-sslincdir=c:/openssl/include --with-ssllibdir=c:/openssl/lib
nmake /nologo clean
nmake /nologo

增加OpenSSL选项编译后,编译一段时间后异常退出,报错提示:LINK : fatal error LNK1104: 无法打开文件“libcrypto64MD.lib”,此问题为win32\net-snmp目录下的net-snmp-config.h文件中规定的OpenSSL 库文件命名不正确,解决办法:
将win32\net-snmp目录下net-snmp-config.h和net-snmp-config.h.in两个文件中的libcrypto64MD.lib、libssl64MD.lib修改为libcrypto.lib、libssl.lib;或者将C:\OpenSSL\lib目录下的libcrypto.lib、libssl.lib修改为libcrypto64MD.lib、libssl64MD.lib 以上方法二选一即可
解决以上问题后,重新开始编译,又出现异常提示:netsnmpagent.lib(snmp_vars.obj) : error LNK2019: 无法解析的外部符号 netsnmp_xxxx,此问题未找到原因,但根据build.pl中给出编译选项,尝试以dynamic方式编译后,再重新编译,问题得到解决。 解决方法:执行以下命令编译动态库文件
perl Configure --prefix=c:/usr --config=release --linktype=dynamic --with-ssl --with-sslincdir=c:/openssl/include --with-ssllibdir=c:/openssl/lib
nmake /nologo libs_clean
nmake /nologo libs

编译完成后,执行以下命令重新编译
perl Configure --prefix=c:/usr --config=release --linktype=static --with-ssl --with-sslincdir=c:/openssl/include --with-ssllibdir=c:/openssl/lib
nmake /nologo clean
nmake /nologo

最终编译完成,未出现其他报错,执行 nmake /nologo install命令完成安装;
4.3 MIB库未找到异常提示
由于源码中MIB库路径是固定/usr/share/snmp/mibs,因此若移动了安装路径或安装到其他路径,则会出现如下异常提示:
MIB search path: c:/usr/share/snmp/mibs
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
Cannot find module (UDP-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
Cannot find module (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): At line 0 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
Cannot find module (DISMAN-EVENT-MIB): At line 0 in (none)
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find module (SNMPv2-TM): At line 0 in (none)

此异常提示不影响使用(未发现影响),但可以通过使用时指定mib库路径解决,即 原命令:snmpget -v 2c -c rwcommstr xxx.xxx.xxx.xxx 1.3.6.1.4.1 修改后:snmpget -M ..\share\snmp\mibs -v 2c -c rwcommstr xxx.xxx.xxx.xxx 1.3.6.1.4.1 指定路径后异常提示消失。
参考资料: net-snmp常见的两个错误及解决办法 Windows 10编译net-snmp-5.9.1




香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价