c++ - 将静态库和动态库链接到同一个可执行文件会导致什么问题?

标签 c++ c dll static-linking dynamic-linking

我今天在面试时被问到这个问题。不幸的是,我不确定我是否在这里正确地复制了它。我只记得,我不太理解它。问题可能是

"What problems can loading statically and dynamically compiled dlls cause?"

我不知道答案,但面试官告诉我至少有两个主要问题:

  1. 运行时库:可能存在一些不兼容的内存分配和取消分配。

  2. 不幸的是,我们在这里被打断了,我们没有回到这个问题。

请您帮我理解这个问题可能是什么,以及答案是什么?

第一点我也不太明白。我以为程序中只能有一个 malloc,我错了吗?

最佳答案

假设 A.dll 与标准库版本 1.0 静态链接。它有一个如下所示的函数:

  char * f() {
     return malloc( 100 );   // uses malloc 1.0
  }

现在假设有另一个库 B.dll 与 A.dll 动态链接,并与标准库版本 1.1 静态链接。它有一个如下所示的函数:

   void g() {
      char * p = f();  // returns the result of malloc 1.0
      free( p );   // uses free 1.1
   }

然后,您可能(我说“可能”是因为这些都不是标准化的)有一个使用标准库 1.0 动态分配的指针,但在版本 1.1 中释放了该指针。这通常会导致严重且难以诊断的问题。

关于c++ - 将静态库和动态库链接到同一个可执行文件会导致什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989605/

相关文章:

c++ - 在 C++ 中解析文件

c - 如何在 C 语言中正确舍入 double ?

python - C DLL 到 Python 回调

c++ - 新的空 VC++ 控制台项目缺少 MFC71.DLL

c++ - 在c++中安全地在dll边界之间传递数据

c++ - 如何知道 EDIT 控件中绘制文本的偏移量?

c++ - 链表练习,我做错了什么?

c - C中的进程同步

c++ - 什么是实现 is_swappable 以测试 Swappable 概念的正确方法?

c - MIPS 中的错误寻址 - 矩阵乘法