Зависимость статических библиотек
Мне нужны некоторые базовые разъяснения по статической связи C++. У меня есть файл с именем data_client.lib. Для библиотечного файла a.exe, b.exe и c.exe есть три независимых потребителя. Существует служба с именем data_server.exe, для которой интерфейсом является data_client.lib. На самом деле, я добавил еще одну функцию к data_server.exe и соответствующий интерфейс к data_client.lib. Так как просто a.exe требуется дополнительная функциональность, я создаю только a.exe. Я отправил data_server.exe, data_client.exe и a.exe как патч. Теперь, b.exe и c.exe случайно / непоследовательно вылетает
mfc42u!CException::`RTTI Полный локатор объектов '+0x10
Имеет ли это смысл? Если я тоже соберу b.exe и c.exe, то сбоя не произойдет. Это так работает?
3 ответа
На самом деле, я добавил еще одну функцию к data_server.exe и соответствующий интерфейс к data_client.lib.
Это немного неясно из того, что именно было добавлено в вашу библиотеку. Однако, если это новый метод или методы, добавленные в класс (а не просто какие-то новые автономные функции), есть очень высокая вероятность того, что перекомпиляция всего поможет решить вашу проблему. Vtable может быть или не быть выбит из ваших изменений.
Также возможно, что ваши сбои не имеют абсолютно никакого отношения к этому, и есть какая-то другая проблема... но по вашему описанию мои деньги связаны с проблемой vtable. Если бы это был я, я бы перекомпилировал b.exe и c.exe и протестировал бы снова, прежде чем исследовать другие проблемы.
Я не знаю об ошибке, но ваши приложения b.exe и c.exe используют более старую версию библиотеки связывания для связи с более новой версией data_server.exe. Некоторые индексы v_table могут быть отключены или что-то еще, если вы добавили функцию. Вы определенно должны восстановить все библиотеки.
Возможно, у вас нет явных зависимостей, но некоторые заголовки вашего проекта используют или неявно помещают информацию в вашу библиотеку.