Классы И Перекомпиляция

Если интерфейс класса не меняется, но его реализация меняется,
(и, соответственно, файл библиотеки, содержащий код функциональности класса), нужно ли перекомпилировать код клиента (приложение драйвера)?

Если приложение драйвера не требует перекомпиляции после упомянутого изменения, как исполняемый файл найдет новое местоположение отредактированного метода в новой библиотеке (той, которая содержит отредактированную функциональность нового класса)?

2

Решение

Если интерфейс класса не изменяется, но изменяется его реализация (и, соответственно, файл библиотеки, содержащий код функциональности класса), необходимо ли перекомпилировать клиентский код (приложение драйвера)?

Вообщем нет. Если вы не сломаете ABI, то в этом нет необходимости.

как исполняемый файл найдет новое местоположение отредактированного метода в новой библиотеке

Так же, как это было в старой библиотеке: динамический компоновщик Разбирается с вами, когда загружается ваш исполняемый файл.

1

Другие решения

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

Файл .dll или .so (или эквивалентный) должен быть заменен в загруженном модуле либо жестким перемещением файла, либо путем изменения ссылки на то, где динамический компоновщик будет искать файлы .dll / .so. В Unix / Linux обычно переменная среды с именем LD_LIBRARY_PATH

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector