2015-04-21 63 views
-1

我一直在努力爲我所需要的libxls.h頭文件中的某些功能的C代碼鏈接。我已經下載了相應的文件並按照安裝說明進行操作。這些文件還包含我試圖編譯的測試C代碼(test.c)。的結果如下:C庫在Linux

  1. 命令編譯test.c的文件 - GCC test.c的-lm

結果:

[[email protected] test]# gcc test.c -lm 
test.c:28:24: error: libxls/xls.h: No such file or directory 
test.c: In function ‘main’: 
test.c:33: error: ‘xlsWorkBook’ undeclared (first use in this function) 
test.c:33: error: (Each undeclared identifier is reported only once 
test.c:33: error: for each function it appears in.) 
test.c:33: error: ‘pWB’ undeclared (first use in this function) 
test.c:34: error: ‘xlsWorkSheet’ undeclared (first use in this function) 
test.c:34: error: ‘pWS’ undeclared (first use in this function) 
test.c:39: error: ‘WORD’ undeclared (first use in this function) 
test.c:39: error: expected ‘;’ before ‘t’ 
test.c:53: error: ‘t’ undeclared (first use in this function) 
test.c:58: error: ‘tt’ undeclared (first use in this function) 
test.c:60: error: dereferencing pointer to incomplete type 
test.c:63: error: dereferencing pointer to incomplete type 
test.c:64: error: dereferencing pointer to incomplete type 
test.c:66: error: dereferencing pointer to incomplete type 
test.c:67: error: dereferencing pointer to incomplete type 
test.c:68: error: dereferencing pointer to incomplete type 
test.c:70: error: dereferencing pointer to incomplete type 
test.c:70: error: dereferencing pointer to incomplete type 
test.c:71: error: dereferencing pointer to incomplete type 
  • 爲了解決這個問題,我複製的庫文件在「/用戶/包括」位置
  • 之後對於相同編譯命令的結果是:

    [[email protected] test]# gcc test.c -lm 
    /tmp/cc8DJETV.o: In function `main': 
    test.c:(.text+0x14): undefined reference to `xls_open' 
    test.c:(.text+0xd4): undefined reference to `xls_getWorkSheet' 
    test.c:(.text+0xe4): undefined reference to `xls_parseWorkSheet' 
    test.c:(.text+0xf0): undefined reference to `xls_getCSS' 
    test.c:(.text+0x49c): undefined reference to `xls_showBookInfo' 
    collect2: ld returned 1 exit status 
    

    請解釋我該如何解決這個問題。

    代碼test.c的給出如下:提前

    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string.h> 
    #include <ctype.h> 
    
    #include <libxls/xls.h> 
    
    int main() 
    { 
    
        xlsWorkBook* pWB; 
        xlsWorkSheet* pWS; 
        FILE *f; 
        int i; 
    
        struct st_row_data* row; 
        WORD t,tt; 
        pWB=xls_open("files/test2.xls", "ASCII"); // "KOI8-R" 
    
        if (pWB!=NULL) 
        { 
         f=fopen ("test.htm", "w"); 
         for (i=0;i<pWB->sheets.count;i++) 
          printf("Sheet N%i (%s) pos %i\n",i,pWB->sheets.sheet[i].name,pWB->sheets.sheet[i].filepos); 
    
         pWS=xls_getWorkSheet(pWB,0); 
         xls_parseWorkSheet(pWS); 
         fprintf(f,"<style type=\"text/css\">\n%s</style>\n",xls_getCSS(pWB)); 
         fprintf(f,"<table border=0 cellspacing=0 cellpadding=2>"); 
    
         for (t=0;t<=pWS->rows.lastrow;t++) 
         { 
          row=&pWS->rows.row[t]; 
          //  xls_showROW(row->row); 
          fprintf(f,"<tr>"); 
          for (tt=0;tt<=pWS->rows.lastcol;tt++) 
          { 
           if (!row->cells.cell[tt].ishiden) 
           { 
            fprintf(f,"<td"); 
            if (row->cells.cell[tt].colspan) 
             fprintf(f," colspan=%i",row->cells.cell[tt].colspan); 
            //    if (t==0) fprintf(f," width=%i",row->cells.cell[tt].width/35); 
            if (row->cells.cell[tt].rowspan) 
             fprintf(f," rowspan=%i",row->cells.cell[tt].rowspan); 
            fprintf(f," class=xf%i",row->cells.cell[tt].xf); 
            fprintf(f,">"); 
            if (row->cells.cell[tt].str!=NULL && row->cells.cell[tt].str[0]!='\0') 
             fprintf(f,"%s",row->cells.cell[tt].str); 
            else 
             fprintf(f,"%s","&nbsp;"); 
            fprintf(f,"</td>"); 
           } 
          } 
          fprintf(f,"</tr>\n"); 
         } 
         fprintf(f,"</table>"); 
         printf("Count of rows: %i\n",pWS->rows.lastrow); 
         printf("Max col: %i\n",pWS->rows.lastcol); 
         printf("Count of sheets: %i\n",pWB->sheets.count); 
    
         fclose(f); 
         xls_showBookInfo(pWB); 
        } 
    
        return 0; 
    } 
    

    感謝,

    +2

    你有你的答案在您的標題。你需要鏈接到圖書館。 '-lxls'。 – Mat

    +2

    ...並手動將任意(包含)文件複製到系統目錄通常不是一個好主意。 – mfro

    +0

    謝謝..你能解釋一下我,我錯過了什麼。還是用於鏈接庫的程序。我是新來的.. 使用-lxls用gcc後,它提供了以下錯誤: 在/ usr/bin中/ LD:找不到-lxls –

    回答