【问题标题】:Use a static library in a DLL在 DLL 中使用静态库
【发布时间】:2017-10-25 14:43:11
【问题描述】:

在使用 C++ 开发的(控制台)应用程序中,我需要向我们开发的 Framework.dll 添加一个新函数。框架中的这个新功能将使用提供给我们的静态库的类。

我将静态库链接到我们的框架,一切正常。然后我开始编辑框架的代码来使用静态库的一个类。该框架仍然在没有警告的情况下构建。运行主应用程序(使用 Framwork.dll)时,该应用程序不会启动。它不会发生在 main() 中。它锁定一个空提示并无休止地等待。

如果我将静态库直接链接到应用程序中,我不会遇到任何问题。但这不是我想使用它的地方。

有人知道我做错了什么吗?

【问题讨论】:

  • 可能问题与静态库无关。您使用 aVast 吗?如果是这样,请禁用它并重试。
  • 对我来说,你正试图做和stackoverflow.com/questions/31446363/…一样的事情
  • 是的,就是这样。基本上这就是我所做的,即将 .lib 链接到我的 DLL 项目中。如果我没有这样做,DLL 项目无论如何都不会构建(由于未解析的外部)。
  • DllMain() 中可能出现死锁。在强迫我们猜测之前一定要使用调试器。调试 > 全部中断并调试 > Windows > 调用堆栈。

标签: c++ dll static-libraries


【解决方案1】:

感谢 Hans Passant,我通过 DllMain 进行了调试。是的,这是一个僵局。问题与在 DLL 中使用静态库没有直接关系。

在静态库中,我有一些被初始化到 CRTDLLmain 中的静态单例。我在实现中遵循双重检查锁定模式,使用 c++ 原子栅栏(如http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/)。然而,它似乎不适用于 C++11 (https://github.com/weidai11/cryptopp/issues/372)。 我编写了一个快速解决方法来测试它,看起来确实如此。然后我会联系 lib 制造商,看看是否可以提供固定版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多