Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 由于相同的文件名/类名出现在不同的so';s_C++_Linux_Object_Shared - Fatal编程技术网

C++ 由于相同的文件名/类名出现在不同的so';s

C++ 由于相同的文件名/类名出现在不同的so';s,c++,linux,object,shared,C++,Linux,Object,Shared,我会尽力解释的 BaseModule.so也有 具有名为core的类的core.h。core.cpp已经实现了 access1.cpp派生自core access2.cpp派生自core 模块1.1也有 Mod1.cpp/h具有Mod1类的声明和实现 ModHelper.cpp为Mod1类提供值 core.h core.cpp有一个名为core的类,用于帮助ModHelper计算值(函数签名与基本模块中的核心类非常相似,但在实现上有一些更改) 模块2.so Mod2.cpp/h具有Mo

我会尽力解释的

BaseModule.so也有

  • 具有名为core的类的core.h。core.cpp已经实现了
  • access1.cpp派生自core
  • access2.cpp派生自core
模块1.1也有

  • Mod1.cpp/h具有Mod1类的声明和实现
  • ModHelper.cpp为Mod1类提供值
  • core.h core.cpp有一个名为core的类,用于帮助ModHelper计算值(函数签名与基本模块中的核心类非常相似,但在实现上有一些更改)
模块2.so

  • Mod2.cpp/h具有Mod2类的声明和实现
  • ModCalculator.cpp/h有助于计算Mod2类的值
  • ModCalculator使用BaseModule中的access1 access2对象
当三个模块全部加载时,段故障

模块2中的段故障,我发现模块2中的access1类使用的是Mod1.so中的core.cpp函数,而不是BaseModule中的函数

它不应该使用BaseModule中的core.cpp函数,因为它们与so不同吗

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

Linux下的编译器gcc
我们正在添加模块…并且不涉及BaseMod功能。

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

问题是。。 Module1.so的makefile引用了BaseModule库,因此,当下一个so(Module2)尝试访问BaseModule引用时,core(core.cpp)中的函数被Module1.so中core.cpp的函数覆盖


修改makefile(删除对BaseModule的库引用)解决了我的问题。

请发布一个最小的可复制代码。
函数签名与基本模块中的核心类非常相似,但在实现上有一些更改
那么您应该使用名称空间,以便名称不会冲突,或者不要对类使用相同的名称。想知道即使它们是完全不同的so中的类,名称如何冲突?而且,派生属性不应该调用其基类方法,而应该调用具有类似名称的类的方法吗?这使我更加困惑。