C++ 尝试在antlr4中生成解析器时出现问题

C++ 尝试在antlr4中生成解析器时出现问题,c++,antlr4,C++,Antlr4,我正试图用C语言编译我自己的ANTLR4解析器++ #include "nibble.h" using namespace antlr4; using namespace nibble; int main(int argc, const char* argv[]){ const std::string file_name = argv[1]; ANTLRInputStream input(file_name); return 0; } 但是当

我正试图用C语言编译我自己的ANTLR4解析器++

#include "nibble.h"

using namespace antlr4;
using namespace nibble;

int main(int argc, const char* argv[]){

    const std::string file_name = argv[1];
    ANTLRInputStream input(file_name);

    return 0;
}
但是当我通过键入
g++nibblec.cpp-o nibblec-I/usr/local/include/antlr4 runtime来编译它时,我得到了

/usr/bin/ld: /tmp/ccqG8KT4.o: warning: relocation against '_ZTVN6antlr416ANTLRInputStreamE' in read-only section '.text._ZN6antlr416ANTLRInputStreamD2Ev[_ZN6antlr416ANTLRInputStreamD5Ev]'
/usr/bin/ld: /tmp/ccqG8KT4.o: in function 'main':
nibblec.cpp:(.text+0x64): undefined reference to 'antlr4::ANTLRInputStream::ANTLRInputStream(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /tmp/ccqG8KT4.o: in function 'antlr4::ANTLRInputStream::~ANTLRInputStream()':
nibblec.cpp:(.text._ZN6antlr416ANTLRInputStreamD2Ev[_ZN6antlr416ANTLRInputStreamD5Ev]+0xf): undefined reference to `vtable for antlr4::ANTLRInputStream'
/usr/bin/ld: nibblec.cpp:(.text._ZN6antlr416ANTLRInputStreamD2Ev[_ZN6antlr416ANTLRInputStreamD5Ev]+0x42): undefined reference to 'antlr4::CharStream::~CharStream()'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
/usr/bin/ld:/tmp/ccqG8KT4.o:警告:针对只读节中的“\u ztvn6antlr416antlrinputstream”重新定位。text.\u ZN6antlr416ANTLRInputStreamD2Ev[\u ZN6antlr416ANTLRInputStreamD5Ev]'
/usr/bin/ld:/tmp/ccqG8KT4.o:在函数“main”中:
nibblec.cpp:(.text+0x64):对“antlr4::antlInputStream::antlInputStream(std::uuCXX11::basic_Stringconst&)”的未定义引用
/usr/bin/ld:/tmp/ccqG8KT4.o:在函数“antlr4::antlInputStream::~antlInputStream()”中:
nibblec.cpp:(.text._ZN6antlr416ANTLRInputStreamD2Ev[_ZN6antlr416ANTLRInputStreamD5Ev]+0xf):对“antlr4的vtable::ANTLRInputStream”的未定义引用
/usr/bin/ld:nibblec.cpp:(.text.\u zn6antlr416antlrimputstreamd2ev[\u zn6antlr416antlrimputstreamd5ev]+0x42):对“antl4::CharStream::~CharStream()”的未定义引用
/usr/bin/ld:警告:在饼图中创建DT_TEXTREL
collect2:错误:ld返回了1个退出状态
什么是ld?为什么我会收到这些警告?我对ANTLR4有什么问题吗


编辑:我正在使用ANTLR 4.9.1

您没有链接到ANTLR。您可能需要将
-lantlr
添加到编译标志中(尽管确切的拼写可能不同,并且您可能需要指定包含ANTLR的库目录)。

另请参见:。