Проблема в том, что при загрузке динамических библиотек (sharedbase_so.so
) он не смог разрешить символ.Попробуйте найти, в какой библиотеке (если есть) символ определен, и убедитесь, что ld может его загрузить (добавить его в путь).Если он отсутствует в какой-либо динамической библиотеке, вернитесь к объектным файлам и попытайтесь определить, где он находится и почему он не попал в двоичный файл.
Распространенной ситуацией, когда это может быть проблемой, являетсяс классами, которые в основном определены как встроенные, например:
struct test {
virtual void foo() {}
//virtual void bar();
};
Если строка с bar
закомментирована, то компилятор сгенерирует виртуальную таблицу как слабый символ во всех единицах перевода, которые его включают.Если bar
не закомментировано, компилятор не будет генерировать vtable в каждой единице перевода, а только в той единице перевода, которая определяет test::bar
.Убедитесь, что даже если вы не используете test::bar
, объектный файл будет связан в библиотеке.