undefined reference to i warning: unused variable

0

Witam próbuje przy pomocy biblioteki net-snmp stworzyć prosty program który odpyta mi określone urządzenie o konkretną wartość ale nie mogę sobie poradzić z następującymi błędami:
warning: unused variable 'session' [-Wunused-variable] //jak zmienić typ auto
undefined reference to snmp_sess_init' undefined reference to snmp_sess_open'

Używam Win 10 Code::Block 16.01 MinGw GCC 4.9 Series piszę w standardzie C++11 NET-SNMP ścieżkę do biblioteki dodałem do Compiler i Linker w C::B.

#include <iostream>
#include <string.h>

#define IP_MY "127.0.0.1"

namespace SNMP
{
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/session_api.h>


    class Socket
    {
    public:
        Socket()
        {
            SOCK_STARTUP;
            init_snmp("snmpapp");
        }
        ~Socket()
        {
            SOCK_CLEANUP;
        }
    };

    const std::string community("public");
    void InitSession(netsnmp_session& session, const std::string& ipAddress)
    {

        snmp_sess_init(&session); //TU ZGŁASZA 1 BŁĄD 
        session.timeout = 500000;
        session.retries = 0;

        session.version = SNMP_VERSION_2c;
        session.remote_port = 161;

        session.peername = (char*)ipAddress.c_str();

        session.community = (u_char*)community.c_str();
        session.community_len = community.size();
    }

    void* OpenSession(const std::string& ipAddress)
    {
        netsnmp_session session;
        InitSession(session, ipAddress);
        void* opaqueSession = snmp_sess_open(&session); //TU ZGŁASZA 2 BŁĄD 
        if (!opaqueSession)
            std::cout << "Session wasn't opened!";
        return opaqueSession;
    }

   
}

int main()

{
    SNMP::Socket socket;

    while (true)
    {
        const std::string ipAddress(IP_MY);

        auto session = SNMP::OpenSession(ipAddress); //TU ZGŁASZA WARNING-a

    }

    return 0;
}
 
0

Na pewno dodałeś do linkera bibliotekę snmp++ ?

2

include nigdy nie robi się wewnątrz namespace-a!
Poza tym taki błąd zwykle oznacza braku dołączenia lib do projektu (do procesu likowania).
Jeśli to jest biblioteka C to ten include powinien być zrobiony tak:

#ifdef __cplusplus
extern "C"{
#endif 

#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/session_api.h>

#ifdef __cplusplus
}
#endif

Jeśli to jest biblioteka C++ to poza zakresem namespace.

Najważniejsze jednak dodać lib-y

0

Niestety na razie wasze podpowiedzi nie przyniosły skutku mam dodane 5x lib-ów i też nic, ten program ma być w c++. Powinna być jeszcze #include "stdafx.h" ale mimo że wrzyciłem do doVC++2013 z tym nagłówkiem to i tak te same błędy. Proszę o kolejne sugestie.

1
8maciej1234 napisał(a):

ten program ma być w c++.

To widać, ale ta biblioteka jest z C, które używa innej metody dekorowania (mangling) niż C++, po to jest to extern "C" by powiedzieć kompilatorowi "teraz będą deklaracje funkcji zdefiniowanych w C".
https://pl.wikipedia.org/wiki/Dekorowanie_nazw

0

Zastosowałem to extern "C" w taki sposób bez void InitSession(netsnmp_session& session, const std::string& ipAddress) w której jest błąd:


#ifdef __cplusplus
extern "C"{
#endif
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <net-snmp/session_api.h>

#ifdef __cplusplus
}
#endif

Niestety nie chce mi to ruszyć te same błędy. Poszukam jeszcze biblioteki z C++. Ale dalej proszę o sugestie.
0

Myślałem, że używasz wersji C (w internecie znalazłem przykład z C więc bylem przekonany, że jest to biblioteka C, a to ewidentnie jest wersja C++ (używa std::string).
Czyli wywal to extern "C"
Jeśli nadal masz problem linkera, to musisz poprawić konfigurację projektu, dodać odpowiednie biblioteki.
Upewnij się też, że dodajesz bibliotekę w poprawnej wersji: dla właściwego kompilatora (CB oznacz MinGW - g++) i właściwej platformy 32/64 bity.
Nigdy nie używałem, ani CB ani net-snmp więc dużo więcej nie jestem w stanie pomóc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1