SNMP入门教程:Windows下编译
net-snmp提供的官方库太老了,需要自己编译新版本。
从net-snmp下载最新版源码。
2025.08.05 最新版是5.9.4
解压后发现源码目录没有提供Makefile或者CMakeLists.txt等文件,只有一个configure脚本,这个脚本是Linux下常用的。
在win32子目录下发现有build.bat的文件,应该是用于编译的脚本。
perl
到Strawberry Perl下载x64位,安装即可。
当前版本为5.40.2,安装完成后自动添加环境变量。
openssl
v3版本需要openssl库,这里使用vcpkg安装
vcpkg install openssl
修改源码
编译流程对Windows不友好,根据实际编译流程,修改部分文件内容。
build.pl
在/win32/build.pl
中添加变量,解决总是编译32位程序问题。
my $target_arch = $ENV{TARGET_CPU} ? $ENV{TARGET_CPU} : $ENV{Platform} ?$ENV{Platform} : "x86";
my $target_arch = "x64";
一旦编译了32位库,那整个环境就被污染了,只能删除源码重来。
net-snmp-config.h
在/win32/net-snmp/net-snmp-config.h.in
中找到1777行
/* MSVC OpenSSL linker settings. */
#if defined(_MSC_VER)
# if defined(NETSNMP_USE_OPENSSL)
# ifdef _DLL
# ifdef _DEBUG
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MDd.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# else
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MD.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# endif
# else
# ifdef _DEBUG
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay32MTd.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# else
# ifdef OPENSSL_BEFORE_1_1_0
# pragma comment(lib, "libeay.lib")
# else
# ifdef _M_X64
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# else
# pragma comment(lib, "libcrypto.lib")
# pragma comment(lib, "libssl.lib")
# endif
# endif
# endif
# endif
# pragma comment(lib, "gdi32.lib")
# pragma comment(lib, "user32.lib")
# endif
#endif#endif /* WIN32 */
修改将要链接的库名称。
编译
打开VS2022的x64本机命令行环境,进入win32子目录。
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'C:\Program Files\Microsoft Visual Studio\2022\Community>D:D:\>cd net-snmp-5.9.4D:\net-snmp-5.9.4>cd win32
执行build.bat
脚本编译
D:\net-snmp-5.9.4\win32>.\build.bat
"my" variable $target_arch masks earlier declaration in same scope at build.pl line 16.Net-SNMP build and install options
==================================1. OpenSSL support: disabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC4. Install path: c:/usr
5. Install after build: enabled6. Perl modules: disabled
7. Install perl modules: disabled8. Quiet build (logged): enabled
9. Debug mode: disabled10. IPv6 transports: disabled
11. winExtDLL agent: disabled12. Link type: static13. Install development files disabledF. Finished - start build
Q. Quit - abort buildSelect option to set / toggle:
选择数字进行设置。
选择1,使用openssl库。
Net-SNMP build and install options
==================================1. OpenSSL support: enabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC4. Install path: c:/usr
5. Install after build: enabled6. Perl modules: disabled
7. Install perl modules: disabled8. Quiet build (logged): enabled
9. Debug mode: disabled10. IPv6 transports: disabled
11. winExtDLL agent: disabled12. Link type: static13. Install development files disabledF. Finished - start build
Q. Quit - abort buildSelect option to set / toggle: 13
选择13,安装开发环境。
Net-SNMP build and install options
==================================1. OpenSSL support: enabled
2. OpenSSL include directory: C:\Progra~1\OpenSSL-Win64\include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC4. Install path: c:/usr
5. Install after build: enabled6. Perl modules: disabled
7. Install perl modules: disabled8. Quiet build (logged): enabled
9. Debug mode: disabled10. IPv6 transports: disabled
11. winExtDLL agent: disabled12. Link type: static13. Install development files enabledF. Finished - start build
Q. Quit - abort buildSelect option to set / toggle: 2
Please enter the OpenSSL include directory [C:\Progra~1\OpenSSL-Win64\include]: C:\vcpkg\installed\x64-windows\include
选择2,设置OpenSSL头文件目录。
Net-SNMP build and install options
==================================1. OpenSSL support: enabled
2. OpenSSL include directory: C:/vcpkg/installed/x64-windows/include
3. OpenSSL library director: C:\Progra~1\OpenSSL-Win64\lib\VC4. Install path: c:/usr
5. Install after build: enabled6. Perl modules: disabled
7. Install perl modules: disabled8. Quiet build (logged): enabled
9. Debug mode: disabled10. IPv6 transports: disabled
11. winExtDLL agent: disabled12. Link type: static13. Install development files enabledF. Finished - start build
Q. Quit - abort buildSelect option to set / toggle: 3
Please enter the OpenSSL library directory [C:\Progra~1\OpenSSL-Win64\lib\VC]: C:\vcpkg\installed\x64-windows\lib
选择3,设置OpenSSL库目录。
Net-SNMP build and install options
==================================1. OpenSSL support: enabled
2. OpenSSL include directory: C:/vcpkg/installed/x64-windows/include
3. OpenSSL library director: C:/vcpkg/installed/x64-windows/lib4. Install path: c:/usr
5. Install after build: enabled6. Perl modules: disabled
7. Install perl modules: disabled8. Quiet build (logged): enabled
9. Debug mode: disabled10. IPv6 transports: disabled
11. winExtDLL agent: disabled12. Link type: static13. Install development files enabledF. Finished - start build
Q. Quit - abort buildSelect option to set / toggle: f
至此,配置完成,选择F
进行编译。
Select option to set / toggle: fBuilding...Creating *.out log files.Deleting old log files...
Running Configure...
Cleaning...
Building main package...Installing main package...
Installing development files...Done!
D:\net-snmp-5.9.4\win32>
编译完成自动退出。到C:\usr可以查看编译结果。默认是Release版本,静态库。
以此流程编译Debug版和动态库。
下载
CSDN:net-snmp 5.9.4 Windows x64 with openssl 自编译版 20MB
本文首发于:SNMP入门教程:Windows下编译