Вопрос

Я хочу написать библиотеку, которая будет динамически связываться с другими программами, работающими в современных операционных системах, таких как Windows, Linux и OS/X (т.е.он будет развернут как .dll или .so модуль).

Какой язык наиболее подходит в этом случае?Должен ли я придерживаться простого C?Или C++ тоже подойдет?

Это было полезно?

Решение

Для реализации вы можете использовать либо C, либо C ++, но я бы порекомендовал определить интерфейс на чистом C. Интегрировать будет намного проще.

Другие советы

Трудность создания библиотеки C++, распространяемой в двоичной форме, заключается в том, что ваши клиенты — пользователи библиотеки — обычно вынуждены использовать тот же компилятор C++, с помощью которого вы создали библиотеку.Это может быть проблематично, если вы хотите быть в курсе событий, а они нет, или если они хотят быть в курсе событий, а вы нет.Если вы работаете с исходным кодом, это не такая проблема, если ваш C++ достаточно переносим, ​​чтобы его можно было использовать всеми компиляторами, которые используют ваши клиенты.

Если код можно использовать из C, я бы, вероятно, написал код для интерфейса C.Альтернативно, предоставьте два интерфейса — собственный интерфейс C++ и интерфейс C.Но это больше работы, чем просто интерфейс C.С другой стороны, интерфейс C++ может иметь преимущества (возможно, использование итераторов STL и т. д.), и это может повлиять на ваше решение.

Я бы также сказал, что C является наименьшим общим знаменателем. У вас всегда есть возможность записать оболочку C ++ в базовую библиотеку, если это лучше интегрируется с вызывающим приложением.

Я бы сказал, что C наиболее предсказуемо переносим, ​​но C++ выполним.

Рассмотрите фактор наименьшего общего знаменателя и заставьте потребителей ваших библиотек принимать решения, которые лучше для них. Конструкция extern c, вероятно, все еще смущает некоторых людей, и вы хотите, чтобы ваша библиотека путешествовала далеко и доходила до самой широкой аудитории. Определенно сделайте интерфейсы чистыми c. C ++ хорошо, если вы избегаете некоторых темных углов (например, STL). С самый переносимый бар нет. Создание библиотек для всех доступных платформ - дело не из легких, поэтому обязательно посмотрите здесь для некоторых подсказок. Вы также можете рассмотреть возможность использования autoconf и т.п.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top