对'main'的未定义引用 - 使用libxml2的Eclipse

时间:2013-11-19 19:01:10

标签: c eclipse libxml2 undefined-reference

我正在尝试使用eclipse在C中编译一个程序,我对'main'错误有一个未定义的引用,但是我的代码有一个main。

链接器正在使用:-nostartfiles,-nodefaultlibs,-nostdlib

它正在使用-c但我删除它因为它给了我其他错误

输出:

make all 
Building file: ../crc.c
Invoking: GCC C Compiler
gcc -I/usr/include/libxml2/libxml -O0 -g3 -Wall -fmessage-length=0 -MMD -MP -MF"crc.d" -MT"crc.d" -o "crc.o" "../crc.c" -I/usr/include/libxml2 -lxml2 -lz -lm
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld devolvió el estado de salida 1
make: *** [crc.o] Error 1

main.c中:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <xmlmemory.h>
#include "crc.h"

#define BIT_SINCRONIA 0X47
#define PID_PAT 0X00
#define table_pat 0x00

FILE *fp2;

int main() {
            //I erased too much lines of code just
        unsigned long crc123 = crcFast(aux, strlen(aux));
        printf("The crcFast() is %X\n", crcFast(aux, strlen(aux)));
        sprintf(aux + strlen(aux), "%X", crcFast(aux, strlen(aux)));
        printf("\nTrama es %s\n", aux);
        printf("ad %X", crc123);

        crc1 = (crc123 & 0xff000000) >> 24;
        crc2 = (crc123 & 0x00ff0000) >> 16;
        crc3 = (crc123 & 0x0000ff00) >> 8;
        crc4 = (crc123 & 0x000000ff);
        fputc(crc1, fp2);
        fputc(crc2, fp2);
        fputc(crc3, fp2);
        fputc(crc4, fp2);
        fclose(fp2);

    }
    return 0;

}

其他功能:(在此功能中我有“无法解析XX类型”(XX = xmlDocPtr,xmlNodePtr等)和“字段YY无法解析”(YY = xmlChildrenNode,name等)

void XMLdataCatcher(int argc, char **argv) {

    xmlDocPtr doc;
    xmlNodePtr root;
    xmlNodePtr node;
    xmlNodePtr children;
    xmlNodePtr children2;
    char bit_error[1024] = "as";

    doc = xmlParseFile("/home/practicante/XML/prueba1.xml");
    if (!doc) {
        printf("Error al cargar documento XML\n");
    }

    root = xmlDocGetRootElement(doc);
    node = root->xmlChildrenNode;
    while (node != NULL ) {
        children = node->xmlChildrenNode;
        while (children != NULL ) {
            if (!(xmlStrcmp(node->name, "bit_error"))) {
                printf("%s: %s\n", node->name, xmlNodeGetContent(node));
                printf("%s\n", bit_error);
                strcpy(bit_error, xmlNodeGetContent(node));
                printf("%s\n", bit_error);
//              bit_error = atoi(xmlNodeBufGetContent(node);
            }
            children2 = children->xmlChildrenNode;
            while (children2 != NULL ) {
                printf("%s: %s\n", children->name, xmlNodeGetContent(children));
                children2 = children2->next;
            }
            children = children->next;
        }
        node = node->next;
    }

    printf("bit_error2 = %d", 1);

//  return (1);
}

还有另一个名为crc.c的函数和标题crc.h,但我认为它们无关紧要。

我不知道这里可能出现什么问题,我在互联网上看,但我找不到这个问题的答案。

请帮帮我。

提前致谢。

[编辑] 输出为-c:

gcc -I/usr/include/libxml2/libxml -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"dataCatcherXML.d" -MT"dataCatcherXML.d" -o "dataCatcherXML.o" "../dataCatcherXML.c" -I/usr/include/libxml2 -lxml2 -lz -lm
../dataCatcherXML.c: En la función ‘XMLdataCatcher’:
../dataCatcherXML.c:17:2: error: nombre de tipo ‘xmlDocPtr’ desconocido
../dataCatcherXML.c:18:2: error: nombre de tipo ‘xmlNodePtr’ desconocido
../dataCatcherXML.c:19:2: error: nombre de tipo ‘xmlNodePtr’ desconocido
../dataCatcherXML.c:20:2: error: nombre de tipo ‘xmlNodePtr’ desconocido
../dataCatcherXML.c:21:2: error: nombre de tipo ‘xmlNodePtr’ desconocido
../dataCatcherXML.c:24:2: aviso: declaración implícita de la función ‘xmlParseFile’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:26:3: aviso: declaración implícita de la función ‘printf’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:26:3: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]
../dataCatcherXML.c:29:2: aviso: declaración implícita de la función ‘xmlDocGetRootElement’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:30:13: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:31:17: error: ‘NULL’ no se declaró aquí (primer uso en esta función)
../dataCatcherXML.c:31:17: nota: cada identificador sin declarar se reporta sólo una vez para cada función en el que aparece
../dataCatcherXML.c:32:18: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:34:4: aviso: declaración implícita de la función ‘xmlStrcmp’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:34:24: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:35:5: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]
../dataCatcherXML.c:35:28: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:35:5: aviso: declaración implícita de la función ‘xmlNodeGetContent’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:37:5: aviso: declaración implícita de la función ‘strcpy’ [-Wimplicit-function-declaration]
../dataCatcherXML.c:37:5: aviso: declaración implícita incompatible de la función interna ‘strcpy’ [activado por defecto]
../dataCatcherXML.c:37:5: aviso: el paso del argumento 2 de ‘strcpy’ crea un puntero desde un entero sin una conversión [activado por defecto]
../dataCatcherXML.c:37:5: nota: se esperaba ‘const char *’ pero el argumento es de tipo ‘int’
../dataCatcherXML.c:41:24: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:43:5: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]
../dataCatcherXML.c:43:32: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:44:26: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:46:23: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:48:14: error: argumento de tipo inválido de ‘->’ (se tiene ‘int’)
../dataCatcherXML.c:51:2: aviso: declaración implícita incompatible de la función interna ‘printf’ [activado por defecto]

1 个答案:

答案 0 :(得分:0)

您似乎缺少链接导出main()的对象文件。我怀疑你没有编译main.c


<强>更新

dataCatcherXML.c是否包含libxml附带的必要标题?