Неопределенная ошибка ссылки в C

0

Я использую библиотеку C antlr3c. Я установил библиотеку, используя: sudo apt-get install libantlr3c-dev

#include "antlr3defs.h"
..

string DBparser::sparqlParser(const string& _sparql, SPARQLquery& _sparql_query)
{
    pANTLR3_INPUT_STREAM input;
    pSparqlLexer lex;
    pANTLR3_COMMON_TOKEN_STREAM tokens;
    pSparqlParser parser;
    input = antlr3StringStreamNew((ANTLR3_UINT8 *)(_sparql.c_str()),ANTLR3_ENC_UTF8,_sparql.length(),(ANTLR3_UINT8 *)"QueryString");
}

Когда я запускаю программу, содержащую указанный выше фрагмент, я получаю сообщение об ошибке: NetBeansProjects/gstore/Parser/DBparser.cpp: 25: неопределенная ссылка на 'antlr3StringStreamNew'

Я не понимаю, как разрешить эту ошибку, поскольку antlr3StringStreamNew действительно объявлен в antlr3defs.h. Хотя я не могу найти его определения.

Если это связано с несовместимостью с версией 3.4 antlr3c (как я установил версию 3.2). Если это действительно так, есть ли альтернативная функция в версии antlr3c версии 3.4, с помощью которой я могу достичь такой же функциональности.

  • 1
    Как вы строите свою программу?
  • 7
    Я скептически отношусь к тому, что вы получаете эту ошибку при запуске программы; это больше похоже на ошибку компоновщика. Обновите свой вопрос, чтобы показать нам, как вы создали программу. Возможно, вам просто нужно добавить опцию -l... при сборке, чтобы компоновщик знал, где найти библиотеку, которая определяет antlr3StringStreamNew . Вам также может понадобиться сделать что-то, чтобы учесть тот факт, что вы вызываете функцию в библиотеке C из кода C ++; antlr3defs.h имеет требуемый extern "C" ?
Показать ещё 1 комментарий
Теги:
ubuntu-12.04

1 ответ

1
Лучший ответ

Кит прав - используемый вами компоновщик ожидает разных символов из-за C++. Таким образом, хотя ваш код будет компилироваться, на этапе ссылки он не с этой ошибкой.

Если вы окружаете свой заголовок, включите его так, что компоновщик должен найти символы:

extern "C" {
    #include "antlr3defs.h"
}

В результате ваш код компилируется со ссылками на имена функций C-стиля, позволяя компоновщику сопоставлять их с соответствующими символами в объектных файлах библиотеки antlr3.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню