История изменений
Исправление a1ba, (текущая версия) :
-
Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)
-
Второй вариант удобнее, но можно и пойти дальше, то есть пользоваться почти всеми благами C++, иметь стабильное ABI, и без
extern "C"
. Главное на границе не передавать объекты, стабильность структуры которых ты гарантировать не можешь. Взять тот же std::string, например. До C++11 и после это два разных объекта. Насколько я помню, у glibcxx даже специальный макрос есть переключающий его формат. -
Добавлю к тому, что выше. Для интеропа с языками, которые поддерживают только Си можно так-то написать отдельную обертку.
-
Не забывай про существование SONAME. Да, он немного ограниченный, но хотя бы немного упрощает сосуществование нескольких версий твоей библиотеки, на случай если ты поменяешь ABI.
Исправление a1ba, :
-
Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)
-
Второй вариант удобнее, но можно и пойти дальше, то есть пользоваться почти всеми благами C++, иметь стабильное ABI, и без
extern "C"
. Главное на границе не передавать объекты, стабильность структуры которых ты гарантировать не можешь. Взять тот же std::string, например. До C++11 и после это два разных объекта. Насколько я помню, у glibcxx даже специальный макрос есть переключающий его формат. -
Добавлю к тому, что выше. Для интеропа с языками, которые поддерживают только Си можно так-то написать отдельную обертку.
Исходная версия a1ba, :
-
Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)
-
Второй вариант удобнее, но можно и пойти дальше, то есть пользоваться почти всеми благами C++, иметь стабильное ABI, и без
extern "C"
. Главное на границе не передавать объекты, стабильность структуры которых ты гарантировать не можешь. Взять тот же std::string, например. До C++11 и после это два разных объекта. Насколько я помню, у glibcxx даже специальный макрос есть переключающий его формат.