在 C++ 中使用 Protobuf 诡异的字段丢失问题排查这篇文章中,分析过因为两个一样的 proto 文件,导致链接错了 pb ,最终反序列化的时候丢失了部分字段。当时也提到过符号决议的过程,不管是动态链接还是静态链接,实际用的都是靠前面的库的符号定义。本来以为对这里的理解很深入了,直到最近又遇见一个奇怪的“符号重定义”问题。
tree . ├── demoA │ ├── libDemoA.a │ ├── sum.cpp │ ├── sum.h │ └── sum.o ├── demoB │ ├── libDemoB.a │ ├── sum.cpp │ ├── sum.h │ └── sum.o └── main.cpp 问题: demoA/sum.h 和 demoB/sum.h 如果都是只有 sum 函数,那么无论哪个先链接,都不会有问题。 但是一旦里面有 class ,定义不一样,那么就会出错。
更多可以看这篇: 深入理解 C++ 链接符号决议:从符号重定义说起
