@egor_spk

Как достигнуть стабильности ABI?

Здравствуйте, коллеги!
Последнее время плотно занялся изучением вопроса стабильности ABI. Для себя выработал два основных подхода:
  • придерживаться некоторых рекомендаций для выбранного компилятора, например, Itanium C++ ABI;
  • заложить стабильность в дизайн приложения, например, использовать идиому pimpl.

По поводу 2 подхода появилось несколько вопросов, на которые хотелось бы получить ответы. Далее вопросы подразумевают, что публичный интерфейс не изменяется и требуется совместимость в рамках одного компилятора.
  1. Динамическая загрузка библиотеки (dlopen, LoadLibrary, Boost.DLL). Актуальны ли для этого случая проблемы (как минимум отсутствует искажение имен) ABI?
  2. Pimpl:
    • Влияет ли добавление абстрактного интерфейса на стабильность ABI (появление vtable)?
    • Как обыграть шаблонные методы/шаблонный класс?


Извиняюсь за некоторый сумбур. Старался написать кратко.
  • Вопрос задан
  • 220 просмотров
Решения вопроса 1
@Kobalt_x
C++ developer
1 -- в boost.dll есть mangled import
2 -- если не экономиим каждый байт то нет
шаблонные классы используем только на стороне клиента.
Наружу из DLL торчит либо C interface либо классы с PIMPL
А шаблонные хелперы наворачиваются поверх них.
Экспорт/импорт шаблонов из dll зло и не поддерживается вроде никем кроме MSVC
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
По-моему, самый стабильный способ -- это сделать простой C интерфейс у либы и предоставить обёртки на C++, которые пользователь вышей либы уже сам будет компилять. После этого, все ваши проблемы решаться :)
Другое решение -- дождаться 23го стандарта, где, по слухам, ABI C++ стандартизуют. Но это очень оптимистичное ожидание.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы