Bonjour,
Juste une question toute bête.
J'utilisais l'appel system:
registerrpc(........) et ça marchait.

Aujourd’hui voila ce que j'ai au moment de la compilation (en fait ld).
tmp/cc5XNBDF.o: In function `main':
serveur.c:(.text+0x98): undefined reference to `registerrpc'
collect2: erreur: ld a retourné 1 code d'état d'exécution
j'ai essayé les #include etc etc .

Merci de vote aide
quelqu'un peut m'aider à trouver le problème. Ce dont je vous remercie d'avance.
#include <stdio.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <rpc/rpc.h>


typedef struct  { int val1;
  int val2; } couple_entier;

// Le filtre xdr
  bool_t xdr_couple(XDR *p, couple_entier *x)
  { return  (xdr_int(p, &x->val1) &&  xdr_int(p, &x->val2));
  }



// La procedure RPC
static int i;
int *somme (couple_entier  *x)
{ i = x->val1 + x->val2; return &i;}


* Les numeros */
#define NUM_PROG 0x22222222 /*  numero de programme */
#define  NUM_VERSION_1 1 /* le numero de version ici 1 */
#define NUM_SOMME 1 /* numero de la procedure somme */



main ()
{

  /* LE PROBLEME ICI */ 
  if (registerrpc(NUM_PROG, NUM_VERSION_1, NUM_SOMME, somme, xdr_couple, xdr_int) ==-1)
    {perror(" Probleme enregistrement du service somme "); exit(1); }

printf("Attente de client \n");

svc_run();

printf(" Sortie du service \n");


}
Pas de réponse. C'est peut être évident, mais je ne trouve pas.
Merci
premier post à 11h55 ce matin
puis un up inutile du post a 12h52 soit environ 1h de différence !

il faut savoir être patient dans la vie, on demande généralement 1journée avant de faire un up de post.
Quelle est la commande utilisée pour compiler ?

EDIT: Chez moi ça compile avec un simple « gcc test.c ».
Tu penses que ce peut venir de quoi alors cette erreur?
3min de patience...

Tu sais que tu as le bouton "Modifier" en bas de chaque poste que tu écris qui permet de modifier ce que tu as écrit.

(Pense aussi au balise code : icône <> au-dessus de la zone de saisie)

Tu dis que ça marchais avant, qu'est-ce qui a changé depuis alors ?
Je viens de voir
libc.a, ne contient pas registerrpc.



Il me semble que les mises à jour sont la cause. De quoi je n'en sais rien, car yum update.

Désolé le problème ne vient pas de la. J'ai réinstallé avec yum reinstall glibc...
Mais le problème ne change pas.
Ce que je ne comprends c'est que le callrpc marche???
daouchy wrote:Je viens de voir
libc.a, ne contient pas registerrpc.
Tu as vu ça où, comment, pourquoi ? Et pourquoi un .a ?
daouchy wrote:Comment faire pour réinstaller glibc
Qu’est-ce qui te dit que ça va résoudre le problème ?

Et est-ce que tu peux répondre à la question de pingou ?
@WilQu, il a répondu "yum update" 😉

@daouchy, tu veux pas nous donner les informations en entier ?
Le fichier on l'a, mais tu veux pas nous donner la sortie de la commande (entre balise code!) ?

Après la question de Wilqu reste entière, pourquoi tu compiles contre la librairie statique ?
Déjà, une simple compilation avec l'option -Wall te donnera
rpc.c:34:3: attention : implicit declaration of function ‘registerrpc’ [-Wimplicit-function-declaration]
Donc, cette fonction n'existe pas (avec les entêtes utilisés).
Je pense que tu as suivi une mauvaise (obsolete) documentation.
pingou wrote:@WilQu, il a répondu "yum update" 😉
Il a complètement édité son message, du coup il ne reste pas un mot de ce que à quoi je répondais. Je comprends un peu mieux l’intérêt des balises quote :lol:
Remi,
Effectivement, je pense comme toi. Le problème vient du manque d'un #include.
Mais je ne sais lequel. D'après le
$ man registerrpc,
il y a
#include<rpc/rpc.h>,
j'ai ajouté d'autres
xdr.h, types.h
etc, etc. Mais ca donne rien
cd  /usr/include; ls | foreach * |grep registerrpc  

Quelqu'un peut me donner le *, le but pour chaque fichier faire cat |grep regsiterrpc
grep -iR registerrpc /usr/include/*
?

Mais je sais pas à quoi ça va servir...
Merci,
J'ai essayé cette commande et ça donne rien.
Ça veut que registerrpc n'est dans aucun #include ?

C'est étonnant? Est-ce un bug?

Est-ce que ce petit programme compile chez vous par exemple.
Et ce que par hasard les fichiers dans /usr/include sont des binaires ? Et-ce que tu penses vraiment qu'un grep sur des binaires va marcher ?
Ce ne sont pas des binaires. c'est des .h

Est-ce que ce petit programme compile chez vous.
 #include <stdio.h>
#include <unistd.h>
#include <rpc/rpc.h>
#include<rpc/xdr.h>
#include<rpc/types.h>
#include<netinet/in.h>
typedef struct couple  { int val1; int val2; } couple; 
bool_t xdr_couple(XDR *p, couple *x)
{ return  (xdr_int (p, &x->val1) &&   xdr_int(p, &x->val2)  );}

int *somme (couple  *x)
{ static int i;
 i = x->val1 + x->val2;
  return( &i);
}

#define NUMP  0x22222222 
#define  NUMV 1  
#define NUMS 1

int main (int argc, char *argv[])
{
  int status;
  status=registerrpc(NUMP, NUMV, NUMS, somme, xdr_couple, xdr_int);
  if (status==-1) 
 {perror(" Probleme enregistrement du service somme "); _exit(1); }
printf("Attente de client \n");
svc_run();
}
Installer    la librairie  #  yum  install libtirpc-dev

et compiler :  

gcc  -l tirpc serveur.c -o serveur 


Et ca marche 
Merci a tous .