gpt4 book ai didi

c++ - MS Visual Studio Windows 中的 Release模式与 Debug模式

转载 作者:可可西里 更新时间:2023-11-01 11:19:48 25 4
gpt4 key购买 nike

我正在使用 MSVS 9 (VS 2008)。我的应用程序以及共享库(dll)(我用来链接我的应用程序)也是 c++ 环境。现在观察以下情况:

  1. 当共享库/dll 在 Debug模式下构建并且我的应用程序也在 Debug模式下构建时结果:应用执行成功

  2. 当共享库/dll 在 Release 模式下构建并且我的应用程序也在 Release 模式下构建时结果:应用执行成功

  3. 当共享库/dll 在 Release 模式下构建并且我的应用程序也在 Debug 模式下构建时结果:应用程序在未从调用堆栈加载任何符号的情况下崩溃。

    调用栈:

    ntdll.dll!76e94684()
    [下面的框架可能不正确和/或丢失,没有为 ntdll.dll 加载符号]

    ntdll.dll!76e7d55f()
    ntdll.dll!76e5fa18()
    ntdll.dll!76e2b3c8()

当我尝试在我的应用程序中使用以下 SetName() 和 GetName() 定义时,会出现此问题。

    using namespace std;
void main()
{
Schema * schemaExp = new Schema();
schemaExp -> SetName("ExpSchema");
string srctable;
srctable=schemaExp->GetName();
cout <<"\nConnection EXPORT using the target table:" << srctable.c_str() << endl;
delete schemaExp;
}

模式类定义:

    using namespace std;
class Schema
{
public:
TELAPI_EXPORT void SetName(char *name);
TELAPI_EXPORT string GetName();
protected:
string tableName;
};
void Schema::SetName(char *name)
{
string str(name);
tableName = str;
}
string Schema::GetName()
{
return tableName;
}

注意:上面的只是我的应用程序的一部分,我的应用程序仅在 #3 中崩溃并且在上面的 #1 和 #2 情况下工作正常

请帮我解决这个问题。非常感谢任何形式的帮助。

提前致谢。

最佳答案

when the shared library/dll is built in Release mode and my application is also built in Debug mode Result: Application is getting crashed without loading any symbols from call stack.

那是因为这不是受支持的配置。默认情况下,Debug 和 Release 目标链接到不同版本的 CRT,这些版本(除其他外)使用不同的内存分配策略并且彼此不兼容。

这只是更一般规则的扩展,即您不应该混合链接到不同版本 CRT 的库。所有项目都需要匹配。正如您已经看到的那样,当他们这样做时,一切都会正常运行。

有一些变通方法,但需要大量工作才能解决。本质上,您要确保所有内存分配都隔离在单个 DLL 中,这样就不会跨越模块边界。您需要从 DLL 导出特定函数来分配和释放内存,以确保分配内存的堆管理器与销毁内存的堆管理器相同。当您使用 newdelete 运算符时,您不能依赖这种情况。坦率地说,在这种情况下,我看不出所有这些努力如何为您带来任何有用的东西。

请注意,这与是否启用优化无关(发布版本默认启用,调试版本不启用)。该设置与链接的 CRT 版本正交。恰好“调试”和“发布”目标暗示多个选项。您可以为一个项目打开优化并为另一个项目关闭它们,这应该会起作用,只要您确保它们都链接到同一版本的 CRT。但同样,我真的看不出这样做有什么意义……如果你想为一个启用优化,为什么要为另一个抑制它们?

相关:Mixing debug and release library/binary - bad practice?

关于c++ - MS Visual Studio Windows 中的 Release模式与 Debug模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564869/

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