Когда у меня есть абстрактный базовый класс 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()
если он правильно связан?
EDIT: уточнить, я использую Linux с GCC или звоном
EDIT 2: пропустил virtual
для bar()
EDIT 4: Я прошу прощения за отсутствие ясности. Вопрос должен был быть «как я могу заставить компоновщика фактически включить foo_impl::bar()
в исполняемый файл, чтобы его можно было разрешить во время выполнения?»
Как он узнает, куда его связать? это виртуальный метод, который требует динамического поиска. – Elazar
Когда создается виртуальная таблица для 'foo_impl', функция-член' foo_impl' помечена как используемая, когда экземпляр объекта этого типа создается. Затем компоновщик автоматически включит его в ваше приложение. –
EDIT 3: my_foo ** -> ** bar(); –