#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
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
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