welche bib muss ich noch einbinden



  • Hi !

    Ich hab einen kleinen Server geschrieben der rpc anbietet. Leider erhalte ich folgende Ausgabe des Compilers:

    [tom@Fedora 4prog4]$ gcc -o server server.c
    /tmp/ccyDdYTe.o(.text+0x4c): In function `main':
    : undefined reference to `portmap_unset'
    /tmp/ccyDdYTe.o(.text+0x95): In function `main':
    : undefined reference to `prinf'
    /tmp/ccyDdYTe.o(.text+0xe8): In function `compileAndRun_SourceCode':
    : undefined reference to `scv_send'
    /tmp/ccyDdYTe.o(.text+0x10c): In function `compileAndRun_SourceCode':
    : undefined reference to `scverr_noproc'
    collect2: ld returned 1 exit status
    

    Folgende Bibs sind eingebunden:

    #include <stdio.h>
    #include <rpc/rpc.h>
    

    Scheinbar macht portmap_unset hier Ärger. Kann mir jemand weiterhelfen. Reichen dieses Infos, oder soll ich den Quellcode mal posten? Oder muss ich dem gcc noch was mitgeben ?

    Über Antwort würde ich mich sehr freuen.

    mfg
    tom



  • Hm, Du hast eben keine Libs eingebunden, nur einen Header inkludiert, darum meldet auch der Linker einen Fehler und nicht der Compiler.

    Vermutlich hast Du vergessen zu irgendeiner librpc oder so zu linken, ich kann leider nur raten, daher würde ich sagen Du solltest noch zu librpcsvc oä linken. (Ist die einzige Ausgabe die ich bei locate librpc erhalte. 😉 )



  • Hi !
    thx für die Antwort. Leider ist das die flasche Bib. Gibt es sonst noch irgendwelche Headers die inkluiert werden sollten ?

    [tom@Fedora 4prog4]$ gcc -o server -L /usr/lib/librpcsvc server.c
    /tmp/ccwpfsaQ.o(.text+0x4c): In function `main':
    : undefined reference to `portmap_unset'
    /tmp/ccwpfsaQ.o(.text+0x95): In function `main':
    : undefined reference to `prinf'
    /tmp/ccwpfsaQ.o(.text+0xe8): In function `compileAndRun_SourceCode':
    : undefined reference to `scv_send'
    /tmp/ccwpfsaQ.o(.text+0x10c): In function `compileAndRun_SourceCode':
    : undefined reference to `scverr_noproc'
    collect2: ld returned 1 exit status
    

    mfg
    tom

    Quellcode (noch nicht komplett)

    #include <stdio.h>
    #include <rpc/rpc.h>
    
    #define RUSERS_PROG 1
    #define RUSERS_VERSION 1
    #define RUSER_PROG_NUM 1
    
    int main(int argc, char **argv) {
      SVCXPRT *transportHandle;
      void (*compileAndRun_SourceCode)(struct svc_req *request ,SVCXPRT* transportHandle);
    
      if ( (transportHandle = svctcp_create(RPC_ANYSOCK, 0, 0)) == NULL) {
        printf("Server: Error creating a TCP transportHandle.\n");
        exit(-1);
      }
    
      if( portmap_unset(RUSERS_PROG, RUSERS_VERSION) == 0) {
        printf("Server: Error unsetting the protmapping. Portmap Server running ?\n");
        exit(-1);
      }
    
      /*regiter a rpc to a special method*/
      if( svc_register(transportHandle, RUSERS_PROG, RUSERS_VERSION, compileAndRun_SourceCode, IPPROTO_TCP ) == 0) {
        prinf("Server: Error registering method to Prognumber an Version.\n");
        exit(-1);
      }
    
      svc_run();
      printf("Server: Error running the RPC Server.\n");
    }
    
    void compileAndRun_SourceCode(struct svc_req *request ,SVCXPRT* transportHandle) {
      char* output;
    
      switch( request->rq_proc) {
    
      case NULLPROC:
        if(!scv_send(transportHandle, xdr_void, NULL) )
          printf("Server: Error sending NULL message to the client.\n");
        return;
    
      case RUSER_PROG_NUM:
    
        /*compile the program an run it..*/
        return;
    
      default:
        scverr_noproc(transportHandle);
        return;
    
      }
    } //end method compileAndRunSourceCode
    


  • Nochmal: Dir fehlt kein Header sondern eine Library, also irgendwas in /usr/lib oä.



  • sorry, hab eigentlich Bibs gemeint 😃




Anmelden zum Antworten