Страницы

Поиск по вопросам

суббота, 6 июля 2019 г.

Статическая библиотека: убрать зависимость от внутренних библиотек

Есть самописная библиотека С++ (.h и .cpp соответственно) использующая библиотеки OpenCV и boost. Заголовочный файл имеет вид: #include #include #include using namespace boost::numeric::ublas; и дальше объявления классов и функций (реализованных в cpp) Использую VS2010, если к проекту "напрямую" подкючать эту библиотеку, прописывать все необходимые файлы для работы openCV и boost, то все работает. Пробовал собрать статическую библиотеку lib. Подключаю заголовочный файл подключаю lib файл к новому проекту и компилятор ругается на неизвестные ему библиотеки: cv.h и тп... Как можно создать статическую библиотеку, так что бы человеку которому необходимо написать прогу с использованием самописной библиотеки, не надо было иметь собранные OpenCV и boost.


Ответ

boost::ublas — это header-only library, поэтому к вопросу она отношения не имеет. То есть тому, кто захочет использовать вашу штуковину, нужно будет иметь хэдеры boost'a, и в этом никакой проблемы лично я не вижу. Далее, правильное решение с OpenCV следующее — не нужно embedd'ить весь OpenCV в вашу библиотеку, а нужно поставлять библиотеку as is, а всех пользователей вашей библиотеки отправлять на opencv.org Решение с embedd'ингом плохое, поскольку вы лишаете пользователей вашей библиотеки возможности динамически линковаться с OpenCV и форсируете увеличение размера любого приложения, собранного с применением вашей библиотеки. Также embedd'инг всего OpenCV в вашу библиотеку чреват проблемами с безопасностью. Что должен сделать пользователь вашей библиотеки, в которую статически влинкован OpenCV 2.4.5, если он узнает, что в 2.4.5 нашли exploit, который позволяет получить доступ к любой системе? OpenCV, скажем, выпускает для этого патч-релиз 2.4.6, а ваш пользователь кусает локти. Последний пример, разумеется, сильно притянут за уши, но аргумент вполне себе имеет место быть. Если вы все-таки решите статически embedd'ить OpenCV в вашу библиотеку, то в Visual Studio это можно сделать, например, с помощью приложения LIB. Вам нужно взять файл вашей библиотеки и файл статически собранной библиотеки OpenCV, сдампить из них obj файлы и склеить эти файлы в новую библиотеку, которую и отправлять пользователю.

Комментариев нет:

Отправить комментарий