我在a.h文件中声明了一个函数f(),在一个bison文件中定义它a.y并在其中调用它 a.cpp文件。
我将其编译为:
g++ a.cpp a.tab.c lex.yy.c -o a
工作正常。
现在我想在b.cpp文件中调用此函数f()。
我该怎么办?
b.cpp文件中包含哪些文件以及编译时要提供的文件。
答案 0 :(得分:0)
您#include "a.h"
并致电f()
。
a.cpp
来自哪里?一般来说,对bison文件和另一个程序文件使用相同的前缀会让人感到困惑。似乎a.cpp
包含main()
函数(虽然这只是基于您的g++
调用的猜测),因此它不适用于某些其他程序的目标文件。我要做的是如下:
bison -d -o parser.c parser.y
# For flex 2.5.4, you cannot put a space between -o and the filename.
# You should seriously think about upgrading to a non-prehistoric version
# flex -o lexer.c lexer.l
flex -olexer.c lexer.l
g++ -c -o parser.o parser.c
g++ -c -o lexer.o lexer.c
g++ -o a a.cpp parser.o lexer.o
g++ -o b b.cpp parser.o lexer.o
(上面会改变a.tab.h
的名称,所以你需要在lexer.l中修复它。但这只是一个建议。)