在我的空闲时间编程中遇到了问题。
我们说,有一个由我编写的大型程序 A.cpp ,并且有bison + flex生成的文件 B.cpp 。 在我运行程序A期间,我想执行解析器(B),然后将非常复杂的对象返回给A.
有没有办法执行此任务,其他然后将类序列化到管道中?
UPD 序列化的问题很简单:我无法将boost库与我的.cpp链接起来。
我曾尝试重新安装libboost-dev 1.46,但链接器一直在喊,不符合引用。
我的代码如下所示:
A.cpp
class blah {
void read () {
yyparse();
arch >> *this;
}
}
B.cpp:
int main() {
yyparse(); // yacc parsing
arch << result;
}
我的makefile如下所示:
bison -d -v reader.y
cp reader.tab.c bison.c
cmp -s reader.tab.h tok.h || cp reader.tab.h tok.h
g++ -O2 -std=c++0x -w -l boost_serialization -c bison.c -o bison.o
flex -d reader.lex
cp lex.yy.c lex.c
g++ -O2 -std=c++0x -w -l boost_serialization -c lex.c -o lex.o
g++ -O2 -std=c++0x -w -l boost_serialization -c reader.cpp -o main.o
g++ -O2 -std=c++0x -w -l boost_serialization bison.o lex.o main.o -o reader -lfl
答案 0 :(得分:1)
如果数据必须跨越进程边界,则无法避免将数据序列化为可传输格式。特别是如果数据包含对其他内存的任何指针/引用,甚至包含其自己的内部成员,因为这些指针/引用在另一个进程的地址空间中无效。