C LNK2001VS2012网络SNMP
我对这个链接器错误束手无策。我已经在网上搜索了好几天了,但我完全不知所措。我通过可下载的二进制文件安装了适用于Windows的网络SNMP(Net-SNMP-5.5.0-2.x64.exe),并尝试运行一个示例程序。编译步骤表明没有错误,但我得到了LNK2001的负载:未解决的外部符号错误。这表明我没有正确地链接这些库,但我觉得我现在有一个错误,希望有人能看到我的错误。我肯定是小东西,但我就是找不到 非常感谢你的帮助;你不知道这会减轻我肩上的重量 其他包含目录:C:\net snmp\Include 其他库目录:C:\net snmp\lib;C:\net snmp\bin 其他依赖项:netsnmp.lib netsnmpage.lib netsnmphelpers.lib netsnmpmibs.lib netsnmptrapd.lib 注意:Net SNMP已安装到C:\Net SNMP,通过命令行使用内置的Net SNMP实用程序可以完美地工作 资料来源:C LNK2001VS2012网络SNMP,c,visual-studio-2012,net-snmp,C,Visual Studio 2012,Net Snmp,我对这个链接器错误束手无策。我已经在网上搜索了好几天了,但我完全不知所措。我通过可下载的二进制文件安装了适用于Windows的网络SNMP(Net-SNMP-5.5.0-2.x64.exe),并尝试运行一个示例程序。编译步骤表明没有错误,但我得到了LNK2001的负载:未解决的外部符号错误。这表明我没有正确地链接这些库,但我觉得我现在有一个错误,希望有人能看到我的错误。我肯定是小东西,但我就是找不到 非常感谢你的帮助;你不知道这会减轻我肩上的重量 其他包含目录:C:\net snmp\Inclu
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <string.h>
int main(int argc, char ** argv)
{
struct snmp_session session;
struct snmp_session *sess_handle;
struct snmp_pdu *pdu;
struct snmp_pdu *response;
struct variable_list *vars;
oid id_oid[MAX_OID_LEN];
oid serial_oid[MAX_OID_LEN];
size_t id_len = MAX_OID_LEN;
size_t serial_len = MAX_OID_LEN;
int status;
struct tree * mib_tree;
/*********************/
if(argv[1] == NULL){
printf("Please supply a hostname\n");
exit(1);
}
init_snmp("Den Dolphin 2 Check");
snmp_sess_init( &session );
session.version = SNMP_VERSION_1;
session.community = (u_char*) "public";
session.community_len = strlen((const char *)session.community);
session.peername = argv[1]; //172.20.2.103 - Den Dolphin 2
sess_handle = snmp_open(&session);
add_mibdir(".");
mib_tree = read_mib("xiden.txt");
pdu = snmp_pdu_create(SNMP_MSG_GET);
read_objid("PowerNet-MIB::upsBasicIdentModel.0", id_oid, &id_len);
snmp_add_null_var(pdu, id_oid, id_len);
read_objid("PowerNet-MIB::upsAdvIdentSerialNumber.0", serial_oid, &serial_len);
snmp_add_null_var(pdu, serial_oid, serial_len);
status = snmp_synch_response(sess_handle, pdu, &response);
for(vars = response->variables; vars; vars = vars->next_variable)
print_value(vars->name, vars->name_length, vars);
snmp_free_pdu(response);
snmp_close(sess_handle);
return (0);
}
链接器配置命令行:
/OUT:"W:\SNMP Depot\NetSMNP\snmp_test\snmp_test\Release\snmp_test.exe" /MANIFEST /LTCG
/NXCOMPAT /PDB:"W:\SNMP Depot\NetSMNP\snmp_test\snmp_test\Release\snmp_test.pdb"
/DYNAMICBASE "netsnmp.lib" "netsnmpagent.lib" "netsnmphelpers.lib" "netsnmpmibs.lib"
"netsnmptrapd.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib"
"advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib"
"odbccp32.lib" /DEBUG /MACHINE:X86 /OPT:REF /SAFESEH /PGD:"W:\SNMP
Depot\NetSMNP\snmp_test\snmp_test\Release\snmp_test.pgd" /MANIFESTUAC:"level='asInvoker'
uiAccess='false'" /ManifestFile:"Release\snmp_test.exe.intermediate.manifest" /OPT:ICF
/ERRORREPORT:PROMPT /NOLOGO /VERBOSE /LIBPATH:"C:\net-snmp\lib" /LIBPATH:"C:\net-snmp\bin"
/TLBID:1
构建和链接网络snmp应用程序的推荐方法如下:
gcc `net-snmp-config --cflags` `net-snmp-config --libs` `net-snmp-config --external-libs` snmp_test.c -o snmp_test
反向引号用于*nix平台。但您也可以在Windows平台上获得必要的值。在shell中执行以下命令,并确保使用CFLAGS和库的输出值
net-snmp-config --cflags
net-snmp-config --libs
net-snmp-config --external-libs
有关列出所需标志和库的其他选项,请参见。请发布显示链接命令行的生成输出。这是您的意思吗?我更新了帖子你用Visual Studio得到这幢楼了吗?我不得不求助于使用Cmake方法来构建IIRC。非常感谢您回复我的帖子!我不太喜欢*nix saavy,所以我有一个愚蠢的问题要问你:当你说在“shell”中执行命令时,你是指Windows中的Cygwin、命令提示符还是其他什么?另外,在我工作的地方,我们基本上使用VS2008或VS2012处理所有事情,这就是为什么我不在这个项目中使用gcc的原因。“net snmp config”应与其他可执行文件一起位于bin目录中。有关其他选项,请参见手册页。很可能您缺少一个库。此命令将为您提供有关可能的库(您可能缺少其中一个库)的想法。不要担心gcc命令。
net-snmp-config --cflags
net-snmp-config --libs
net-snmp-config --external-libs