【问题标题】:Build C++ dll for Release and Debug为发布和调试构建 C++ dll
【发布时间】:2018-02-04 14:51:57
【问题描述】:

所以我开始接触 c++,并且我最近构建了一个记录器类,即将任何类型打印到屏幕和/或日志文件。我将其构建为 dll,输出文件为

console.h
console.lib
console.dll

然后我将这些文件作为附加包含导入到另一个项目中,并且它仅在调试模式下(在其中构建)我希望它能够工作,而不管构建配置如何。我怎样才能做到这一点。举个例子,我最近使用了 GLFW 库,并且可以构建它是如何编译的。

【问题讨论】:

  • 你在使用 Visual Studio 吗?
  • @ZDF 是的,我正在使用 Visual Studio
  • 只需将配置从调试更改为发布和构建。输出在 Release 子目录中生成。创建新项目时会自动生成这两种配置。
  • 是的,但是如果我调试包含此库的应用程序,这将起作用
  • 当前 VC 版本也开启了发布配置的调试信息。

标签: c++ dll


【解决方案1】:

如果我正确理解您正在尝试将相同版本的 lib/dll 与您的应用程序的调试和发布配置链接。

一般情况下,您需要两个版本的 lib/dll 文件,调试和发布,并与与您的应用程序配置匹配的版本链接,因此对于您的应用程序的调试配置,请与您的 lib/dll 的调试配置链接,以及随放随放。

使用混合配置(如调试 dll 和发布 exe)最可能出现的问题是在一个域中分配内存并在另一个域中释放它。

编辑:

详细地说,问题可能是在您的 DLL 中分配内存并在您的 EXE 中释放它,反之亦然。这不起作用,至少对于 VS C-Runtime。更多详情请见:https://stackoverflow.com/a/45806858/453271

【讨论】:

  • 感谢回答,但我在发布模式下构建了库,无法运行在调试模式下包含库的应用程序。但是,像 GLEW / GLFW 这样的库只能在调试和发布中使用一个库,无论如何构建一个可以在两种模式下运行的库
  • 这些库 API 是否设计用于在 DLL 中分配和释放内存?我确定他们是。您也可以重新设计您的 API,例如在您的 DLL 中分配/取消分配您的记录器,例如通过提供CreateLogger()/DestroyLogger() 导出函数。也适用于所有其他导出的类。编辑了答案以提供更多详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多