【问题标题】:Static library segfaults when calling another static library调用另一个静态库时出现静态库段错误
【发布时间】:2015-04-03 10:53:12
【问题描述】:

我从我的一个 C++ 项目中创建了一个静态库 A,我可以在另一个项目 X 中使用它。

但是,我的静态库 A 中的一些函数调用静态库 B(DevIL 图像加载库)中的其他函数。因此,为了编译我的项目 X,我在链接器中包含了 A 和 B,它编译得很好。

问题是我的程序只有在我调用库 A 中的函数时才会出现分段错误,而这些函数又会调用库 B。

有没有办法解决这个问题?我是否应该将库 A 和 B 合并到一个库中(不存在影响此的许可问题)?如果这有所作为,我正在使用 Visual Studio 2013。

【问题讨论】:

  • 使用 debug-info 构建应用程序和库,然后在调试器中运行以捕获崩溃。
  • 我已经通过调试器。我没有依赖库B的来源,但是错误发生在B分配内存的函数中。
  • 你是怎么调用那个函数的?您确定问题不在您的代码中(在您如何调用函数、您传递的参数等方面)?
  • 不,因为如果我将 A 编译为可执行文件而不是库,并且 A 在 B 中调用相同的函数,它可以正常工作。
  • 有几种可能的pb:这与回调函数有关吗?当一个库管理另一个库分配的内存时会发生这种情况吗?您必须为我们提供更多信息才能提供帮助...

标签: c++ linker static-libraries


【解决方案1】:

我在按正确顺序链接库时遇到问题。检查一下。

【讨论】:

  • 你能解释一下你的答案吗?
  • 在 CMake 中链接 .a 文件的顺序很重要。
  • 但是 op 使用 msvc,这并不重要:如果 btw 符号存在冲突,链接器会抱怨
  • 我没有使用 MSVC 的经验。我确实在 *nix 操作系统中看到过类似的情况。
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 2021-08-08
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多