当我有一个抽象基类foo
时,定义在libX.a
class foo {
virtual void bar() = 0;
};
...和一个派生类foo_impl
,定义在libY.a
class foo_impl : public foo {
void bar() { /* do something */ }
};
...并使用这两个库来链接程序-lX -lY
int main() {
foo* my_foo = receive_a_foo_from_somewhere();
my_foo->bar();
}
然后
- 如何强制链接器实际链接引用的符号
foo_impl::bar()
? - 正确链接时是否
objdump -t program
列出?foo_impl::bar()
编辑:澄清一下,我正在使用带有 gcc 或 clang 的 linux
编辑2:错过virtual
了bar()
编辑 4:我为缺少清晰度而道歉。问题应该是“如何强制链接器实际包含foo_impl::bar()
在可执行文件中,以便在运行时解决它?”