Как построить независимую от компилятора библиотеку C++ (для Solaris Studio и gcc)?
Я хотел бы расширить мою библиотеку, которая в настоящее время компилируется только с использованием gcc, для использования в Solaris Studio.
Моя идея состоит в том, чтобы сделать следующее:
- Напишите функции-оболочки в C, которые предоставляют соответствующие части интерфейса с внешней связью C.
- Затем создайте эту библиотеку, используя gcc. Результирующий c-заголовок и двоичный файл не зависят от компилятора, так как больше нет искажения имен.
- Включите c-header и ссылку в проект, скомпилированный с помощью Solaris Studio.
Вопрос: это выполнимый подход или есть лучшее решение этой проблемы?
Примечание. Помимо искажения имен, также следует следить за проблемами, связанными с обработкой исключений.
1 ответ
Ваш план верен.
Пока ваша библиотека предоставляет C API, совместимый с платформой ABI (размеры и выравнивание типов C, соглашения о вызовах) и не генерирует исключения C++, у вас не возникнет проблем при связывании вашей библиотеки с использованием других компиляторов или языков.
Вы также можете добавить оболочку только для заголовка C++ для вашего C API, чтобы сделать ее легко пригодной для повторного использования из C++ и исключительной безопасности.