【问题标题】:C program using net-snmp does not compile使用 net-snmp 的 C 程序无法编译
【发布时间】:2020-01-24 14:57:48
【问题描述】:

我在 Ubuntu 16.0.4 机器上安装了 net-snmp 5.8,然后我检查了正确的安装:

snmpget --version

NET-SNMP 版本:5.8

接下来,我正在尝试编写和编译我的第一个 SNMP C 程序示例。

我复制了 Ben Rockwood 的教程中的示例(“Net-SNMP 编程指南”),并尝试使用以下命令对其进行编译:

gcc ‘net-snmp-config --cflags‘ ‘net-snmp-config --libs‘ \
> ‘net-snmp-config --external-libs‘ snmp_test.c -o snmp_test

如本教程所述。

什么时候做,我得到错误:

gcc:错误:无法识别的命令行选项“--cflags” gcc:错误:无法识别的命令行选项“--libs” gcc:错误:无法识别的命令行选项“--external-libs”

然后我把gcc命令改成:

gccnet-snmp-config --cflagsnet-snmp-config --libs\

net-snmp-config --external-libssnmp_test.c -o snmp_test

并得到错误:

bash:net-snmp-config --external-libs:不明确的重定向

gcc 调用有什么问题?欢迎任何cmets或建议。

【问题讨论】:

    标签: c gcc snmp


    【解决方案1】:

    您可能使用了错误的刻度。用这种方式进行命令替换,比较安全:

    gcc $(net-snmp-config --cflags) $(net-snmp-config --libs) $(net-snmp-config --external-libs) snmp_test.c -o snmp_test
    

    您在此处显示的刻度 () 是错误的,您需要的是这些:`。不过,我更喜欢$() 语法,它还有一个额外的优势,就是它是可嵌套的。

    【讨论】:

      【解决方案2】:

      我已经尝试过你告诉我的命令

      gcc $(net-snmp-config --cflags) $(net-snmp-config --libs) $(net-snmp-config --external-libs) snmp_test.c -o snmp_test

      并且我收到以下错误:

      /tmp/ccKrUliA.o:在函数'main'中:

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:29:未定义对“init_snmp”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:31:对`snmp_sess_init'的未定义引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:36:未定义对“snmp_open”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:38:未定义对“add_mibdir”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:39:未定义对“read_mib”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:40:未定义对“snmp_pdu_create”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:42:未定义对“read_objid”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:43:未定义对`snmp_add_null_var'的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:45:未定义对“read_objid”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:46:未定义对`snmp_add_null_var'的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:48:未定义对`snmp_synch_response'的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:51:未定义对“print_value”的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:53:未定义对`snmp_free_pdu'的引用

      /home/jose/NETWORK_PROTOCOLS/ej_02_SNMP/snmp_test.c:54:未定义对`snmp_close'的引用

      collect2: 错误:ld 返回 1 个退出状态

      然后我尝试添加-L和-lsnmp,结果如下:

      jose@jose-VirtualBox:~/NETWORK_PROTOCOLS/ej_02_SNMP$ gcc -L/usr/locallib/ -lsnmp $(net-snmp-config --cflags) $(net-snmp-config --libs) $(net -snmp-config --external-libs) snmp_test.c -o snmp_test

      /usr/bin/ld: 找不到-lsnmp

      collect2: 错误:ld 返回 1 个退出状态

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        相关资源
        最近更新 更多