2016-06-10 17 views
0

Ich versuche, dieses ProgrammUndefined Verweis auf 'FCGX'

#include <stdlib.h> 
#include <string.h> 
#include <syslog.h> 
#include <alloca.h> 
#include <fcgiapp.h> 

#define LISTENSOCK_FILENO 0 
#define LISTENSOCK_FLAGS 0 

int main(int argc, char** argv) { 

    openlog("testfastcgi", LOG_CONS|LOG_NDELAY, LOG_USER); 

    int err = FCGX_Init(); 
    /* call before Accept in multithreaded apps */ 
    if (err) { 
     syslog (LOG_INFO, "FCGX_Init failed: %d", err); 
     return 1; 
     } 

    FCGX_Request cgi; 
    err = FCGX_InitRequest(&cgi, LISTENSOCK_FILENO, LISTENSOCK_FLAGS); 
    if (err) { 
     syslog(LOG_INFO, "FCGX_InitRequest failed: %d", err); 
     return 2; 
     } 

    while (1) { 
    err = FCGX_Accept_r(&cgi); 
    if (err) { 
     syslog(LOG_INFO, "FCGX_Accept_r stopped: %d", err); 
     break; 
     } 
    char** envp; 
    int size = 200; 
    for (envp = cgi.envp; *envp; ++envp) 
     size += strlen(*envp) + 11; 

    return 0; 
    } 

Mit diesem Befehl zu kompilieren

sudo gcc -I/usr/local/include -lfcgi fastcgi.c -o test.fastcgi 

ich dann diesen Fehler:

/tmp/ccsqpUeQ.o: In function 

fastcgi. :(.text+0x3d): undefined reference to `FCGX_Init' 
fastcgi. :(.text+0x88): undefined reference to `FCGX_InitRequest' 
fastcgi. :(.text+0xc9): undefined reference to `FCGX_Accept_r' 
fastcgi. :(.text+0x373): undefined reference to `FCGX_PutStr' 
collect2: error: ld returned 1 exit status 

Ich denke, es liegt daran, Die Header-Dateien werden nicht gefunden.

Antwort

0

I then get this error:

/tmp/ccsqpUeQ.o: In function 
fastcgi. :(.text+0x3d): undefined reference to `FCGX_Init' 
fastcgi. :(.text+0x88): undefined reference to `FCGX_InitRequest' 
fastcgi. :(.text+0xc9): undefined reference to `FCGX_Accept_r' 
fastcgi. :(.text+0x373): undefined reference to `FCGX_PutStr' 
collect2: error: ld returned 1 exit status 

I think it's because the header files aren't being found.

Nein, das ist nicht durch Dateien auf Header nicht gefunden werden. Dies sind Linker-Fehler; Sie passieren, nachdem Ihre Datei erfolgreich kompiliert wurde. Sie verlinken nicht gegen alle notwendigen Bibliotheken.

Sie müssen herausfinden, welche Bibliothek enthält FCGX_Init und fügen Sie das als -l<library> zu Ihrem GCC-Aufruf.

Auch Reihenfolge der Argumente ist wichtig, und Ihre .c Datei muss kommen vor Ihrer -l Richtlinien, dh.

gcc -I/usr/local/include -lfcgi fastcgi.c -o test.fastcgi 

ist falsch, richtig

gcc -I/usr/local/include fastcgi.c -lfcgi -o test.fastcgi 

Auch wäre, sollten Sie nie Kompilierung Code als root (nicht sudo für den Aufbau von Software, die jemals verwenden Sie).

+0

Vielen Dank für Ihre Antwort! Ich habe es irgendwie herausgefunden, indem ich das Argument "Ich" einfach losgeworden bin. Es kompiliert ohne Fehler! –

+0

Ah richtig, das könnte funktionieren, weil Ihre Serverlaufzeit die Symbole aus Ihrer fcgi-Bibliothek lädt. –