#cpp #lib #visual_studio
Есть самописная библиотека С++ (.h и .cpp соответственно) использующая библиотеки OpenCV и boost. Заголовочный файл имеет вид: #include#include #include using namespace boost::numeric::ublas; и дальше объявления классов и функций (реализованных в cpp) Использую VS2010, если к проекту "напрямую" подкючать эту библиотеку, прописывать все необходимые файлы для работы openCV и boost, то все работает. Пробовал собрать статическую библиотеку lib. Подключаю заголовочный файл подключаю lib файл к новому проекту и компилятор ругается на неизвестные ему библиотеки: cv.h и тп... Как можно создать статическую библиотеку, так что бы человеку которому необходимо написать прогу с использованием самописной библиотеки, не надо было иметь собранные OpenCV и boost.
Ответы
Ответ 1
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 файлы и склеить эти файлы в новую библиотеку, которую и отправлять пользователю.Ответ 2
Доброго времени суток! На мой взгляд тут два варианта: 1) Собираем библиотеку и компонуем ее со сторонними библиотеками статически, но нашу библиотеку делаем компонуемой динамически + пишем к ней интерфейс убрав все упоминания о заголовочных файлах boost и OpenCV. Пользователю предоставляем нашу библиотеку + наши заголовочные файлы. 2)Собираем библиотеку и компонуем ее со сторонними библиотеками статически, и нашу библиотеку также делаем статической. Затем пользователю Вам необходимо будет предоставить Вашу либу + все заголовки (как Вашей библиотеки, так и сторонних). Других способов нет - по крайней мере они мне не известны
Комментариев нет:
Отправить комментарий