由于相同的文件名/类名存在于不同的SO中而导致的SEG错误

seg fault due to same file name / class names present in different so's

本文关键字:SEG 错误 SO 存在 文件名 于相同 于不同      更新时间:2023-10-16

我会尽力解释。

BaseModule.so 有

  • Core.H 具有名为 core. core.cpp 的类具有实现
  • 访问1.cpp派生自核心
  • access2.cpp源自核心

Module1.so 有

Mod1
  • .cpp/h 具有 Mod1 类的声明和实现
  • ModHelper.cpp 为 Mod1 类提供值
  • core.h core.cpp 有一个名为 core 的类,它可以帮助 ModHelper 计算值(函数签名与 Base 模块中的核心类非常相似,但在实现上进行了一些更改(

Module2.so

Mod2
  • .cpp/h 具有 Mod2 类的声明和实现
  • ModCalculator.cpp/h 有助于计算 Mod2 类的值
  • ModCalculator 使用来自 BaseModule 的访问对象1 访问2

加载所有三个模块时分段故障

模块二的分段错误,我发现模块二中的access1类正在使用 Mod1.so 的核心.cpp函数,而不是使用BaseModule中的函数

它不应该使用 BaseModule 中的核心.cpp函数,因为它们是不同的?

我只能修改模块一 如何解决这个问题,如何防止将来发生这样的事情..

Linux 中的编译器 gcc 我们正在添加模块...并且不要触摸 BaseMod 功能。

终于找到了上述问题的解决方案。

问题是.. Module1.so 的 makefile 具有对 BaseModule 库的引用,因此,当下一个 so (Module2( 尝试访问 BaseModule 引用时,核心(core.cpp(中的函数被核心函数覆盖.cpp在 Module1.so

修改生成文件(删除对 BaseModule 的库引用(解决了我的问题。