Я планирую выпустить некоторый скомпилированный код, который должен быть связан клиентскими приложениями на MacOSX.Распространение бинарной библиотеки на OSX
Распределение является своего рода библиотека кода и набор заголовочных файлов, определяющий общий интерфейс для кода library.The внутренне C++, но ее внешний интерфейс (т.е. то, что показывается в заголовках) полностью C.
это мои требования или по крайней мере то, что я надеюсь, что смогу выполнить:
- Я хочу, чтобы моя библиотека, чтобы быть агностиком , насколько это возможно для какой версии OSX и GCC пользователь работает. Имея отдельные библиотеки для 64 бит и 32 бит все в порядке.
- Я хочу, чтобы моя библиотека была загружаема с языков, которые поддерживает загрузку библиотек C, таких как python или аналогичные.
- Я хочу, чтобы мои библиотеки были внутренними символами, которые должны быть изолированы от кода, в котором оно находится . Я не хочу иметь ошибки дубликатов символов, так как так же называют внутреннюю функцию . Мой код на C++ правильно помещается в имена, поэтому это может быть не так уж и важно, но некоторые из библиотек, на которые я полагаюсь, являются C и могут быть проблемой (см. Следующий пункт).
- Я хочу, чтобы моя библиотека зависимости были безопасными. Моя библиотека зависит от некоторых библиотек, таких как Libpng, импульс и СТЛ, и я не хочу проблем, потому что некоторые пользователи не обязательно все они установлены или получить проблемы, потому что они были собраны с другими флагами или имеют разные версии, чем у меня.
В Windows я использую DLL с библиотекой экспорта и ставя статистику всех моих зависимостей в DLL. Он удовлетворяет всем вышеперечисленным критериям, и если я могу получить тот же результат на OSX, это было бы здорово, однако я слышал, что динамические библиотеки, как правило, не изолируют символы на mac таким же образом.
Есть ли какая-то передовая практика для этого на OSX?
Это похоже на хорошее решение. Есть ли у вас хорошая рекомендация о том, как создать файл экспорта? – Laserallan
Я добавил некоторые подробности о том, как использовать файл экспорта; для того, как его создать, если библиотека не слишком большая, я обычно использую nm для получения списка всех символов, а затем удаляю те, которые я хочу сохранить в привате. Для больших проектов это не очень эффективный подход, поэтому я обычно пишу скрипты для создания файла для меня. –
Также обратите внимание, что нет необходимости в отдельных 32- и 64-разрядных библиотеках; OS X позволяет использовать dylib, поддерживающие несколько архитектур. Он немного запутан из командной строки, но если вы используете XCode, он должен просто работать. –