LINUX.ORG.RU

История изменений

Исправление a1ba, (текущая версия) :

  1. Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)

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

  3. Добавлю к тому, что выше. Для интеропа с языками, которые поддерживают только Си можно так-то написать отдельную обертку.

  4. Не забывай про существование SONAME. Да, он немного ограниченный, но хотя бы немного упрощает сосуществование нескольких версий твоей библиотеки, на случай если ты поменяешь ABI.

Исправление a1ba, :

  1. Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)

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

  3. Добавлю к тому, что выше. Для интеропа с языками, которые поддерживают только Си можно так-то написать отдельную обертку.

Исходная версия a1ba, :

  1. Стабильный ABI нужен только тогда, когда у твоей библиотеки есть пользователи. А у тебя они есть? Что такое пилишь, если не секрет? :)

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