2012-05-30 12 views
3
[[email protected] mxml-2.7]# gcc -o xml XmlParser1.c -lmxml 
XmlParser1.c: In function ‘main’: 
XmlParser1.c:63: warning: assignment discards qualifiers from pointer target type 
/usr/local/lib/libmxml.so: undefined reference to `pthread_key_create' 
/usr/local/lib/libmxml.so: undefined reference to `pthread_once' 
/usr/local/lib/libmxml.so: undefined reference to `pthread_getspecific' 
/usr/local/lib/libmxml.so: undefined reference to `pthread_key_delete' 
/usr/local/lib/libmxml.so: undefined reference to `pthread_setspecific' 
collect2: ld returned 1 exit status 

編譯XmlParser1.c時出現以下錯誤。 XmlParser1.c:編譯C語言中的Xml解析器時出現線程錯誤?

#include <stdio.h> 
#include "mxml.h" 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <fcntl.h> 
#include <string.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <string.h> 

#define MAX_SIZE 25 

static mxml_node_t *xml; 
static mxml_node_t *str; 
static mxml_node_t *DataSet; 

static mxml_node_t *Table; 
static mxml_node_t *IsAuthenticated; 
static mxml_node_t *AuthenticationDate; 
static mxml_node_t *Response; 

int main() 
{ 
    int fd = 0; 
    char *Result=NULL; 
    const char *NewResult=NULL; 
    mxml_node_t *tree; 
    mxml_node_t *data; 
    const char *type = NULL; 

    FILE *fp = fopen("/home/suneet/mxml-2.7/Sample/main.xml", "r") ; 
    if (fp == NULL) 
    { 
     fclose(fp); 
    } 
    else 
    { 
     fseek (fp , 0, SEEK_END); 
     long settings_size = ftell (fp); 
     rewind (fp); 

     if (settings_size > 0) 
     { 
      tree = mxmlLoadFile(NULL, fp, MXML_NO_CALLBACK); 
      fclose(fp); 

      printf("step 1\n"); 
      data = mxmlFindElement(Table, tree, "diffgr:id", NULL, NULL, MXML_DESCEND); 
      Result = mxmlElementGetAttr(data,"diffgr:id"); 
      printf("diffgr:id:%s\n",(Result == NULL)?"NULL":Result); 
      mxmlDelete(data); 
      mxmlDelete(tree); 
     } 
    } 

    return 0; 
} 

,而我試圖去與http://minixml.org/給出的步驟;根據xml文件解析出現一些錯誤「動態庫libxml.so的線程未定義錯誤」。

請指導我,以便我可以成功解析xml文件。

+3

這是一個鏈接錯誤而不是編譯錯誤。您還需要鏈接到pthread庫('-lpthread'),好像你錯過了它。 –

+0

@Als:是否有任何單獨的方法來解析XML模式?在迷你XML中有一些單獨的XML模式的方法。如果是這樣;請告訴我。 –

回答

1

您需要在您的代碼中包含pthread。 在你的文件

#include<pthread.h> 
+0

我不認爲這是他的問題。他正在獲取關於未定義參考的鏈接器錯誤。如果他錯過了pthread.h include,他會在特定的行號上發生編譯器錯誤。我猜想mxml.h已經包含了pthread.h。 – selbie

2

您需要使用-pthread選項pthread庫鏈接的開始加入這一行。

gcc -o xml XmlParser1.c -lmxml -pthread