【问题标题】:Undefined reference to `main' - Eclipse using libxml2对“main”的未定义引用 - 使用 libxml2 的 Eclipse
【发布时间】:2013-12-03 11:52:11
【问题描述】:

我正在尝试使用 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、名称等)

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]

【问题讨论】:

  • 你知道被删除的-c发起了什么吗?
  • 我刚刚用 -c 编辑了帖子
  • 对不起,我不会说西班牙语。我也不知道 gcc 会这样做。

标签: c eclipse libxml2 undefined-reference


【解决方案1】:

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


更新:

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

【讨论】:

  • 是的,我把它们写在main.c "#include "
  • 每个翻译单元(典型的是*.c 文件)都需要包含所需的内容。所以dataCatcherXML.c 也应该包含所需的内容。
  • 如何链接导出 main() 的目标文件?
  • 将包含main() 的文件添加到您的项目中。
  • 您在此处显示的main.c 可能是正确的文件。你添加到你的项目中了吗?它被编译了吗?到目前为止,我在您发布的任何 gcc 命令中都没有看到 main.c
猜你喜欢
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2016-04-19
  • 2015-05-08
  • 1970-01-01
  • 2012-08-16
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多