【发布时间】:2011-11-10 15:26:36
【问题描述】:
在我正在编写的应用程序中,我正在从我编写的共享库中动态加载对象。
这很好,直到虚函数发挥作用。这意味着我可以轻松地调用 getter 和 setter,但在尝试调用覆盖虚拟基类函数的函数时,我会立即遇到分段错误。我目前的想法不多了,因为我项目中的每个类(层次结构)都会发生这种情况。
在应用程序内部创建对象时可以成功调用函数,完全不使用动态加载或共享库。
我怀疑是概念错误或某种编译/链接错误。
类层次结构如下所示:
BaseClass.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);
}
Derived.cpp:
bool Derived::enroll(const shared_ptr<string> filepath) {
cout << "enroll" << endl;
}
(包括此处省略的命名空间)
应用程序加载库并获得一个(共享)指向 BaseClass 对象的指针(应用程序包括 BaseClass.h)。除虚拟功能外,所有功能均可执行。
开发是在 Eclipse CDT 中完成的。当前所有内容都在一个具有不同构建配置的项目中(应用程序的 .cpp 在共享库的配置中被禁用,反之亦然)。编译器是 g++ 4.4。层次结构的所有 .o 文件都与库链接,设置了 -shared。
非常感谢任何帮助。
【问题讨论】:
-
你在调试器中运行过这个吗?
-
我有,但是当我第二次尝试访问虚拟功能时,我得到了一个段错误。我在虚函数的名称上设置了断点,但在库中从未成功调用过。
标签: c++ eclipse dll segmentation-fault eclipse-cdt