Цель ANTLR C и XMLLib

У меня есть программа, написанная на C, которая использует XMLLib и лексер/парсер, сгенерированный из ANTLR.

Мои включения выглядят так:

#include    "MyParser.h"
#include    "MyLexer.h"
#include    "antlr3.h"
#include <libxml/tree.h>
#include <libxml/parser.h>

Проблема в том, что моя программа отказывается компилироваться, выдавая ошибку:

In file included from /usr/include/libxml2/libxml/parser.h:19:0,
                 from /usr/include/libxml2/libxml/globals.h:18,
                 from /usr/include/libxml2/libxml/threads.h:35,
                 from /usr/include/libxml2/libxml/xmlmemory.h:218,
                 from /usr/include/libxml2/libxml/tree.h:1248,
                 from MyProgram.c:4:
/usr/include/libxml2/libxml/valid.h:276:21: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
/usr/include/libxml2/libxml/valid.h:302:21: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
In file included from /usr/include/libxml2/libxml/globals.h:18:0,
                 from /usr/include/libxml2/libxml/threads.h:35,
                 from /usr/include/libxml2/libxml/xmlmemory.h:218,
                 from /usr/include/libxml2/libxml/tree.h:1248,
                 from MyProgram.c:4:
/usr/include/libxml2/libxml/parser.h:800:19: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
In file included from /usr/include/libxml2/libxml/parser.h:808:0,
                 from /usr/include/libxml2/libxml/globals.h:18,
                 from /usr/include/libxml2/libxml/threads.h:35,
                 from /usr/include/libxml2/libxml/xmlmemory.h:218,
                 from /usr/include/libxml2/libxml/tree.h:1248,
                 from MyProgram.c:4:
/usr/include/libxml2/libxml/xmlIO.h:293:19: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
In file included from /usr/include/libxml2/libxml/globals.h:18:0,
                 from /usr/include/libxml2/libxml/threads.h:35,
                 from /usr/include/libxml2/libxml/xmlmemory.h:218,
                 from /usr/include/libxml2/libxml/tree.h:1248,
                 from MyProgram.c:4:
/usr/include/libxml2/libxml/parser.h:961:22: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
/usr/include/libxml2/libxml/parser.h:967:22: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant
/usr/include/libxml2/libxml/parser.h:1063:54: error: expected ‘)’ before ‘f’
/usr/include/libxml2/libxml/parser.h:1065:3: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘xmlGetExternalEntityLoader’
/usr/include/libxml2/libxml/parser.h:1068:19: error: expected ‘;’, ‘,’ or ‘)’ before numeric constant

Если я не включу первые два включения, все будет правильно компилироваться (я заменил функцию main() на простой «возврат 0»). Любая идея, что может быть причиной этого? :(

Моя команда компиляции выглядит так:

gcc *.c -c -lantlr3c -I/usr/include/libxml2

Изменить: я установил пакет libxml2-dev из диспетчера пакетов Ubuntu, если это имеет значение


person Richard Walton    schedule 20.07.2011    source источник
comment
Не забудьте также связать libxml, передав параметр -lxml2 компилятору. Я попробовал сгенерированный парсер на своей машине и, к сожалению, получил такие же ошибки.   -  person sidyll    schedule 21.07.2011
comment
Также опубликовано здесь: antlr.markmail.org/message/s66vo6wor2b47m5b   -  person Bart Kiers    schedule 21.07.2011
comment
что вы включили в строку MyProgram.c:4: ..??   -  person Jeegar Patel    schedule 09.08.2011
comment
#include ‹libxml/tree.h›   -  person Richard Walton    schedule 09.08.2011
comment
Я получаю ту же проблему. Удалось решить?   -  person Unnati    schedule 12.08.2014


Ответы (2)


Похоже на проблемы с макросами. Строка 961 файла parser.h включает идентификатор, который может быть определен в одном из ваших заголовков.

person chmeee    schedule 30.08.2011

Я не уверен, можно ли воскресить тему, но у меня была та же проблема для более простой программы, даже если я пытался использовать «-I /usr/include/libxml2». Однако, как только я передал связанный аргумент, код смог скомпилироваться.

Текущий FAQ сайта Libxml.org (http://www.xmlsoft.org/FAQ.html ) поговорим об этом:

Уголок разработчика

Проблемы компиляции или компоновки программ с использованием libxml2 Обычно проблема возникает из-за того, что компилятор не получает правильных флагов компиляции или компоновки. Существует небольшой сценарий оболочки xml2-config, который устанавливается как часть обычного процесса установки libxml2, который предоставляет эти флаги. Использовать

xml2-config --cflags

чтобы получить флаги компиляции и

xml2-config --libs

чтобы получить флаги компоновщика. Обычно это делается непосредственно из Makefile как:

CFLAGS=xml2-config --cflags

БИБС=xml2-config --libs

Не уверен, что год назад уже был с этим полезным советом.

person RFuentess    schedule 13.06.2013