Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/06/2013, à 09:51

kifsser'lito

COmpilation d'un code C sous Ubuntu

Bonjour,

Je suis en train de travailler avec l'API C du protocole de communication SNMP, et je rencontre une erreur , je suis vraiment bloqué j'ai besoin de votre aide .

voici l'erreur que j'ai :

 
root@ubuntu-VirtualBox:/home/ubuntu/Desktop/ProgrammeTestSnmp# make snmp_test
gcc -I. `net-snmp-config --cflags`    snmp_test.c   -o snmp_test
In file included from snmp_test.c:3:0:
/usr/lib/gcc/i686-linux-gnu/4.7/include/varargs.h:4:2: error: #error "GCC no longer implements <varargs.h>."
/usr/lib/gcc/i686-linux-gnu/4.7/include/varargs.h:5:2: error: #error "Revise your code to use <stdarg.h>."
make: *** [snmp_test] Error 1

Voici mon programme en C :

 
#include <net-snmp/net-snmp-config.h>
#include <net-snmp/net-snmp-includes.h>
#include <varargs.h>
#include <string.h>
#include <stdarg.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;
	
/*************************/

/************************/

  init_snmp("APC Check");
  snmp_sess_init( &session );
  session.version = SNMP_VERSION_1;
  session.community = "public";
  session.community_len = strlen(session.community);
  session.peername = ("APC");
  sess_handle = snmp_open(&session);

  mib_tree = read_mib("NET-SNMP-TUTORIAL-MIB.txt"); 

  pdu = snmp_pdu_create(SNMP_MSG_GET);

  read_objid("NET-SNMP-TUTORIAL-MIB::nstAgentSubagentObject", id_oid, &id_len);
   snmp_add_null_var(pdu, id_oid, id_len);
  read_objid("NET-SNMP-TUTORIAL-MIB::nstAgentPluginObject", 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);
}

Mon Makefile :


 
CC=gcc

OBJS1=snmp_test.o 
TARGETS=snmpd_test 

CFLAGS=-I. `net-snmp-config --cflags`
BUILDLIBS=`net-snmp-config --libs`
BUILDAGENTLIBS=`net-snmp-config --agent-libs`

# shared library flags (assumes gcc)
DLFLAGS=-fPIC -shared

all: $(TARGETS)

snmpdemoapp: $(OBJS1)
	$(CC) -o snmpd_test $(OBJS1) $(BUILDLIBS)

Hors ligne

#2 Le 10/06/2013, à 10:25

gl38

Re : COmpilation d'un code C sous Ubuntu

gcc te dit qu'il ne veut pas de varargs.h et qu'il faut essayer avec stdarg.h.
Qu'arrive-t-il si tu enlèves la ligne

#include <varargs.h>

Cordialement,
Guy

Hors ligne

#3 Le 10/06/2013, à 10:32

kifsser'lito

Re : COmpilation d'un code C sous Ubuntu

Bonjour,

Merci Guy pour votre réponse .

Si j'enléve la ligne

#include <varargs.h>

il m'affiche l'erreur suivante , comme quoi les founctions suivantes ne sont pas définie :

gcc -I. `net-snmp-config --cflags`    snmp_test.c   -o snmp_test
/tmp/ccGAqrGZ.o: In function `main':
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:32: undefined reference to `init_snmp'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:33: undefined reference to `snmp_sess_init'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:38: undefined reference to `snmp_open'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:40: undefined reference to `read_mib'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:42: undefined reference to `snmp_pdu_create'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:44: undefined reference to `read_objid'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:45: undefined reference to `snmp_add_null_var'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:46: undefined reference to `read_objid'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:47: undefined reference to `snmp_add_null_var'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:49: undefined reference to `snmp_synch_response'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:52: undefined reference to `print_value'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:54: undefined reference to `snmp_free_pdu'
/home/ubuntu/Desktop/ProgrammeTestSnmp/snmp_test.c:55: undefined reference to `snmp_close'
collect2: error: ld returned 1 exit status
make: *** [snmp_test] Error 1


Merci d'avance .

Hors ligne

#4 Le 10/06/2013, à 10:34

Michel SIMIAN

Re : COmpilation d'un code C sous Ubuntu

Oui, Guy a raison.

Il ne faut plus utiliser varargs mais stdarg à la place.
(ce sont les mêmes mécanismes)

Hors ligne

#5 Le 10/06/2013, à 10:38

Michel SIMIAN

Re : COmpilation d'un code C sous Ubuntu

Re,

En regardant ton code et ton makefile, les nouvelles erreurs sont dûes à l'absence des librairies de snmp

Je pense que tu dois les trouver là :
http://www.net-snmp.org/download.html

sinon, essaye la commande

net-snmp-config --libs

en dehors de ton makefile, seule, en ligne de commande.

Hors ligne

#6 Le 10/06/2013, à 11:01

kifsser'lito

Re : COmpilation d'un code C sous Ubuntu

RE ,

Merci MIchel pour vos réponses .

j'ai lancé la commande line depuis mon Terminal comme tu ma demandé , et j'obtiens le chemin suivant :

 
root@ubuntu-VirtualBox:/home/ubuntu/Desktop/ProgrammeTestSnmp# net-snmp-config --libs
-L/usr/local/lib -lnetsnmp -lrt -lcrypto -lm

Merci d'avance

Hors ligne

#7 Le 10/06/2013, à 12:58

Michel SIMIAN

Re : COmpilation d'un code C sous Ubuntu

Donc, on sait que net-snmp va chercher les librairies dans /usr/local/lib.

Elles se nomment libnetsnmp, notamment.
Il faut aussi les libs multi-threads (que -lrt signale) et la lib crypto (qu'il te faut installer à part)

Si tu cherches dans /usr/local/libs, par un ls -l libnet*, tu devrais soit trouver tes librairies, soit ne pas les trouver... (élémentaire smile
A priori, elles n'y sont pas, et tu dois charger les paquets netsnmp et crypto.

Bon courage

Hors ligne

#8 Le 10/06/2013, à 14:17

kifsser'lito

Re : COmpilation d'un code C sous Ubuntu

RE,

j'ai cherché dans le repertoire /usr/local/lib et je me suis aperçus que les packages de Crypto manquaient, alors je les instalées .

mais pour les libs (RT je sais est ce que ça signifie Real Time ou autre chose ) , svp est que vous savez la commande line pour installer cette librarie  ?


Merci d'avance

Hors ligne

#9 Le 10/06/2013, à 16:15

Michel SIMIAN

Re : COmpilation d'un code C sous Ubuntu

Non, je ne sais pas la commande pour les installer les libs SNMP. Il faut aller sur le site de net-snmp et télécharger et ...

... suivre la doc smile

Pour l'option RT, il faut chercher (synaptic, logithèque, ...) les pthread et installer le paquet libpthread-dev ou quelque chose comme cela (fichiers de développement), le multi-thread n'est pas fourni en standard par la libc.

Bon courage

Hors ligne