【发布时间】:2015-07-23 10:06:51
【问题描述】:
我有一个类 AbsAlgorithm,它有 3 个虚拟方法:
class AbsAlgorithm
{
public:
//..... other methods
virtual void run() = 0;
virtual bool init(TestCase&) = 0;
virtual bool done() = 0;
};
我创建了一个静态库libAlgatorc.a,其中包含这个类。
我还有 SortingAbsAlgorithm 类,它继承自 AbsAlgorithm 并覆盖方法 run、init 和 done。
class SortingAbsAlgorithm : public AbsAlgorithm
{
public:
void run()
{
execute(...);
}
bool done()
{
return result;
}
}
当我创建一个包含此类(和其他一些类)的共享库时,我在共享库中没有 SortingAbsAlgorithm::run、SortingAbsAlgorithm::init 和 SortingAbsAlgorithm::done 的符号。为什么?
我这样创建共享库:
g++ -std=gnu++11 -fPIC SortingAbsAlgorithm.cpp SortingTestSetIterator.cpp SortingTestCase.cpp -shared -o libProject.so -Wl,--whole-archive -lAlgatorc -Wl,--no-whole-archive
【问题讨论】:
-
你定义了那些纯虚函数吗?如果它们只被声明而不是定义,那么库中可能会输出什么?或者您是在询问
SortingAbsAlgorithm中的覆盖吗? (不清楚您要问的是哪些符号)。 -
即使在您编辑之后,仍然不清楚您要询问的是哪些符号。您是否希望看到
AbsAlgorithm::run或SortingAbsAlgorithm::run或两者的符号? -
我期待看到 SortingAbsAlgorithm::run。我想不会有任何 AbsAlgorithm::run 符号
-
好吧,那你的问题自相矛盾,因为你说“这是因为这个方法是纯虚方法吗?”而
SortingAbsAlgorithm::run不是纯虚方法 -
好的。我把那句话删了。 SortingAbsAlgorithm::run 符号不在我的共享库中可能有什么问题?
标签: c++ linker shared-libraries static-libraries