gpt4 book ai didi

C++:动态共享库中的虚函数产生段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:36 26 4
gpt4 key购买 nike

在我正在编写的应用程序中,我正在从我编写的共享库中动态加载对象。

这在虚函数发挥作用的时候很好。这意味着我可以轻松地调用 getter 和 setter,但在尝试调用覆盖虚拟基类函数的函数时,我会立即遇到段错误。我目前的想法已经用完了,因为我项目中的每个类(层次结构)都会发生这种情况。

在应用程序内部创建对象时可以成功调用这些函数,根本不使用动态加载或共享库。

我怀疑我这边有概念错误或某种编译/链接错误。

类层次结构如下所示:

基类.h:

class BaseClass : public EvenMoreBaseClass {
public:
virtual bool enroll(const shared_ptr<string> filepath) = 0;
}

派生.h:

class Derived : public BaseClass {
bool enroll(const shared_ptr<string> filepath);
}

派生.cpp:

bool Derived::enroll(const shared_ptr<string> filepath) {
cout << "enroll" << endl;
}

(包括和命名空间在这里省略)

应用程序加载库并获取指向 BaseClass 对象的(共享)指针(应用程序包含 BaseClass.h)。可以执行除虚拟函数之外的所有函数。

开发是在 Eclipse CDT 中完成的。目前一切都在一个项目中,具有不同的构建配置(应用程序的 .cpp 在共享库的配置中被禁用,反之亦然)。编译器是 g++ 4.4。层次结构的所有 .o 文件都与库链接,设置了 -shared。

如果有任何帮助,我将不胜感激。

最佳答案

也许这是一个很晚的答案,但我发现了相同的行为,如果您在访问虚拟方法之前使用 dlclose(handle) 就会发生这种情况(尽管静态方法可以正常工作)。因此,在处理完其中的对象之前,您不应该关闭库句柄。

关于C++:动态共享库中的虚函数产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com