You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake链接net-snmp库时出现未定义引用链接错误

问题

已通过MinGW按照readme.win32说明编译好net-snmp库,运行snmpdemoapp示例代码时,CMake生成正常但构建链接失败。

使用的CMake配置代码:

cmake_minimum_required(VERSION 3.18.2)

project("PROJECT_NAME")
INCLUDE_DIRECTORIES(C:/nsnmp/include)

find_library(NETSNMPAGENT "netsnmpagent")
find_library(NETSNMPMIBS "netsnmpmibs")
find_library(NETSNMP "netsnmp")

add_executable("${PROJECT_NAME}" Main.c)

target_link_libraries("${PROJECT_NAME}" ${NETSNMPAGENT} ${NETSNMPMIBS} ${NETSNMP})

构建错误日志:

[main] Building folder: Psnmp 
[build] Starting build
[proc] Executing command: "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" --build c:/Users/Hanaei/Desktop/Psnmp/build --config Debug --target all --
[build] [1/1 100% :: 0.354] Linking C executable PROJECT_NAME.exe
[build] FAILED: PROJECT_NAME.exe 
[build] cmd.exe /C "cd . && C:\msys64\mingw64\bin\gcc.exe -g  CMakeFiles/PROJECT_NAME.dir/Main.c.obj -o PROJECT_NAME.exe -Wl,--out-implib,libPROJECT_NAME.dll.a -Wl,--major-image-version,0,--minor-image-version,0  C:/nsnmp/lib/libnetsnmpagent.a  C:/nsnmp/lib/libnetsnmpmibs.a  C:/nsnmp/lib/libnetsnmp.a  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(mib.o): in function `dump_realloc_oid_to_inetaddress':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/mib.c:4085: undefined reference to `__imp_ntohl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(mib.o): in function `parse_one_oid_index':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/mib.c:3877: undefined reference to `__imp_htonl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(parse.o): in function `compute_match':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/parse.c:1294: undefined reference to `regcomp'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/parse.c:1297: undefined reference to `regfree'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/parse.c:1296: undefined reference to `regexec'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/parse.c:1297: undefined reference to `regfree'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(snmp_api.o): in function `_sess_open':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/snmp_api.c:1699: undefined reference to `__imp_setsockopt'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(snmp_api.o): in function `snmp_add_var':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/snmp_api.c:7514: undefined reference to `__imp_inet_addr'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_parse_float':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:2554: undefined reference to `__imp_ntohl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_build_float':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:2628: undefined reference to `__imp_htonl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_parse_double':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:2745: undefined reference to `__imp_ntohl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_build_double':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:2823: undefined reference to `__imp_htonl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_realloc_rbuild_float':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:3859: undefined reference to `__imp_htonl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(asn1.o): in function `asn_realloc_rbuild_double':
[build] C:\Users\Hanaei\Downloads\net-snmp-5.9.3\snmplib/asn1.c:3937: undefined reference to `__imp_htonl'
[build] C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/nsnmp/lib/libnetsnmp.a(system.o): in function `get_myaddr':
解决方案

链接失败是因为net-snmp依赖的系统库未被加入链接列表,需要补充以下库:

  • ws2_32:提供ntohl、htonl、setsockopt、inet_addr等网络相关函数
  • regex:提供regcomp、regexec、regfree等正则表达式函数

同时建议添加库搜索路径,避免find_library无法定位net-snmp库,修改后的CMake配置代码如下:

cmake_minimum_required(VERSION 3.18.2)

project("PROJECT_NAME")

# 指定net-snmp库的搜索路径
link_directories(C:/nsnmp/lib)

find_library(NETSNMPAGENT "netsnmpagent")
find_library(NETSNMPMIBS "netsnmpmibs")
find_library(NETSNMP "netsnmp")

add_executable("${PROJECT_NAME}" Main.c)

# 仅为当前目标添加头文件路径,符合现代CMake规范
target_include_directories("${PROJECT_NAME}" PRIVATE C:/nsnmp/include)

# 链接net-snmp库及依赖的系统库
target_link_libraries("${PROJECT_NAME}" 
    ${NETSNMPAGENT} 
    ${NETSNMPMIBS} 
    ${NETSNMP}
    ws2_32
    regex
)

内容的提问来源于stack exchange,提问作者Ali Assar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 16:45:34