gpt4 book ai didi

c++ - 确保相同的配置用于库和可执行文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:46 25 4
gpt4 key购买 nike

假设我正在分发二进制库。它有两个版本,调试版和发布版。调试和发布彼此不兼容,所以如果例如用户构建一个发布可执行文件,他/她必须链接到发布库。

如果库版本和可执行版本之间存在不匹配,目前会出现很难发现的细微错误。相反,我想显示一个非常清楚的错误消息,通知存在不匹配,最好是在链接时。

实现此目标的好方法是什么?

最佳答案

我将假设您使用的是静态库,而二进制文件是指将在编译时链接的 .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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com