假设我正在分发二进制库。它有两个版本,调试版和发布版。调试和发布彼此不兼容,所以如果例如用户构建一个发布可执行文件,他/她必须链接到发布库。
如果库版本和可执行版本之间存在不匹配,目前会出现很难发现的细微错误。相反,我想显示一个非常清楚的错误消息,通知存在不匹配,最好是在链接时。
实现此目标的好方法是什么?
最佳答案
我将假设您使用的是静态库,而二进制文件是指将在编译时链接的 .lib(与运行时可能不匹配的 dll 等相反)。
在我看来,最简单的方法是在您的 .h 文件中使用这种结构
#ifdef _RELEASE //or whatever your compiler uses
#define InitialiseLibrary InitialiseLibraryRelease
#else
#define InitialiseLibrary InitialiseLibraryDebug
#endif
类似的在库的cpp文件中:
#ifdef _RELEASE //or whatever your compiler uses
void InitialiseLibraryRelease()
{
CommonInitialise();
}
#else
void InitialiseLibraryDebug()
{
CommonInitialise();
}
#endif
现在在使用库的主 exe 中:
InitialiseLibrary();
如果库和 exe 的版本不匹配,则链接器将报告不匹配一个或其他 InitialiseLibrary... 函数。
另一种选择是确保发布和调试库编译为不同名称的文件,然后使用 .h 文件中的#pragma 获取链接以工作(而不是在项目中显式包含该库)。 使用上面的#ifdef,您可以在编译时通过选择使用哪个#pragma 来选择要链接的库。第二种技术并不能完全解决您的问题(因为如果程序员试图强制链接,它不会停止链接的发生)但它是处理此类困难的正常方法(并且在复杂的构建环境中具有优势)
关于c++ - 确保相同的配置用于库和可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4850578/