我们的代码库有数千行代码和遗留代码。随着时间的推移,不同的开发者会根据其适用性和标准进行编码。其中一个错误实现的代码是包含一个通用头文件,在不同的目录中声明和定义,以排列在不同的二进制文件中,几乎没有区别。例如:链接问题虽然构建不同的二进制文件
DIR1/xxx.h
class ABC{
public:
int init();
};
DIR1/xxx.cpp
ABC::init()
同样
DIR2有它自己的拷贝。
的问题是,开发商想保持不同的版本 - 主要是因为他们应该知道什么时候需要下DIR1或DIR2是独立修改各自的调用源代码。
现在,我们如何在二进制代码中链接代码的层次结构是我们的问题。关注的头文件使用相同的包含指令#ifndef .. #define .. #endif进行有条件编译。头文件被存档到lib1.a lib2.a等等。因此,当我们链接我们的库时,如果我们在链接期间需要lib3.a,我们需要确保它链接到第一个:
ldd .. lib1.a lib2.a lib3.a
- 所以确切的头文件没有正确链接。请注意,所有.a都有一些编译和链接的其他接口。
其不幸的是,所要求的报头包含共同声明(定义相同的方法,但不同的一点)
我们怎样才能解决这个问题?包括命名空间在我们的代码库中意味着很多改进?有没有更好的方法来做到这一点?
什么是最好的设计,这样的代码库 - 以至于后来开始没有开发人员可以无意中包括这些致命的签名?
请帮