Зависимость статических библиотек - PullRequest
2 голосов
/ 30 ноября 2009

Мне нужны некоторые базовые разъяснения по статической связи 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 Complete Локатор объектов '+ 0x10

Имеет ли это смысл? Если я тоже соберу b.exe и c.exe, то сбоя не произойдет. Это так работает?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2009

Я не знаю об ошибке, но ваши приложения b.exe и c.exe используют более старую версию библиотеки связывания для связи с более новой версией data_server.exe. Некоторые индексы v_table могут быть отключены или что-то еще, если вы добавили функцию. Вы определенно должны перестроить все библиотеки.

2 голосов
/ 30 ноября 2009

На самом деле я добавил еще одну функцию к data_server.exe и соответствующий интерфейс к data_client.lib.

Немного неясно, что именно было добавлено в вашу библиотеку. Однако, если это новый метод или методы, добавленные в класс (а не просто какие-то новые автономные функции), есть очень высокая вероятность того, что перекомпиляция всего решит вашу проблему. vtable может или не может быть выбит из ваших изменений.

Также возможно, что ваши сбои не имеют абсолютно никакого отношения к этому, и есть какая-то другая проблема ... но из вашего описания мои деньги связаны с проблемой vtable. Если бы это был я, я бы перекомпилировал b.exe и c.exe и протестировал бы снова, прежде чем заняться другими проблемами.

2 голосов
/ 30 ноября 2009

Возможно, у вас нет явных зависимостей, но некоторые заголовки вашего проекта используют или неявно помещают информацию в вашу библиотеку.

...