我已经在 ah 文件中声明了一个函数 f(),在野牛文件 ay 中定义它并在 a.cpp 文件中调用它。
我将其编译为:
g++ a.cpp a.tab.c lex.yy.c -o a
它工作正常。
现在我想在 b.cpp 文件中调用这个函数 f() 。
我怎样才能做到这一点。
哪些文件要包含在 b.cpp 文件中,哪些文件要在编译时提供。
你#include "a.h"
和打电话f()
。
从哪里来a.cpp
?一般来说,对一个野牛文件和另一个程序文件使用相同的前缀是令人困惑的。它似乎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 中修复它。但这只是一个建议。)