Перейти к содержимому
Compvision.ru
FingerScan

Статическая линковка библиотек OpenCV

Recommended Posts

Добрый день!

Хочется знать ответ на следующие вопросы:

1. Возможно ли так создать проект, что бы не таскать за собой библиотеки cxcore210.dll, highgui210.dll и т.д.?

2. Под linux тоже что-то нужно будет таскать за собой, что бы исполняемый файл запускался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. Нет, надо потр..аться с перекомпилированием OpenCV, пересознанием его проектов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1. Нет, надо потр..аться с перекомпилированием OpenCV, пересознанием его проектов.

Перекомпилировать придется, пересоздавать проекты нужды нет.

В двух словах:

1. Открываете солюшен OpenCV, в нужных проектах выставляете цель линковки lib вместо dll.

2. Собственно, компилируете, ищете нужные файлы (к сожалению, пути настроены не совсем очевидным образом).

3. Кроме этого необходимо забрать скомпилированные lib-файлы для сторонних библиотек (libpng, libjpeg и пр.).

5. Также нам понадобится файл videoInput.lib, его можно найти в папке 3rdparty/lib.

7. Еще нужны файлы vfw32.lib и comctl32.lib (у меня они потащились из Platform SDK).

8. Берете из OpenCV папку include.

9. Последний штрих - кроме подключения всех этих библиотек, в Вашем компилируемом файле необходимо в список игнорируемых библиотек добавить файл atlthunk.lib (его будет пытаться тащить за собой упоминаемый выше videoInput.lib).

Собственно, все достаточно просто. И теперь на выходе только один exe-файл. Очень удобно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Перекомпилировать придется, пересоздавать проекты нужды нет.

В двух словах:

......

Собственно, все достаточно просто. И теперь на выходе только один exe-файл. Очень удобно.

Спасибо что вы естЬ! :D Буду пробовать!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кстати если в Cmake выбрать Uncheck "BUILD_SHARED_LIBRARIES" то это эквивалентно статической линковке?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при попытке подключить статические либы пишет

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzputs

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzclose

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzopen

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzgets

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzrewind

1>opencv_core230d.lib(persistence.obj) : error LNK2001: unresolved external symbol _gzeof

в чем может быть проблема?

если что использую /MTd

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при попытке подключить статические либы пишет

в чем может быть проблема?

если что использую /MTd

gz может GZip ?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а zlib.lib подключена?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://recog.ru/blog/opencv/24.html

хотя возможно когда статически линкуешь и надо подключать. во всяком случае на выходе в папке lib были только стандартные либы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я делаю поиск по содержимому всех файлов (искать, например, gzrewind). Где она реализована, то и подключаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну я так же и сделал. только обычно эти либы отдельно не используются, видимо встраиваются в тот же core.lib.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при использовании в проекте статических либ и попытке использования cvSaveImage

выдает

1>Linking...

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_init

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_cleanup

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_destroy

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_stream_close

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_matrix_destroy

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_writecmpt

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_matrix_create

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_decode

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_stream_fopen

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_readcmpt

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_getcmptbytype

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_cmprof_destroy

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_chclrspc

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_cmprof_createfromclrspc

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_encode

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_strtofmt

1>opencv_highgui230.lib(grfmt_jpeg2000.obj) : error LNK2001: unresolved external symbol _jas_image_create

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_destroy_read_struct

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_read_end

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_read_image

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_read_update_info

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_rgb_to_gray

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_gray_to_rgb

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_bgr

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_expand_gray_1_2_4_to_8

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_palette_to_rgb

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_strip_alpha

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_swap

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_strip_16

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_longjmp_fn

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_error

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_get_io_ptr

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_get_IHDR

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_read_info

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_init_io

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_read_fn

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_create_info_struct

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_create_read_struct

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_destroy_write_struct

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_write_end

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_write_image

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_write_info

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_IHDR

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_compression_strategy

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_compression_level

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_filter

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_compression_mem_level

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_set_write_fn

1>opencv_highgui230.lib(grfmt_png.obj) : error LNK2001: unresolved external symbol _png_create_write_struct

может либы неправильно собраны? я zlib.lib отдельно подключаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А libpng и libjasper компилировал, подключал?

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

хмм так работает, но все таки непонятно почему их надо собирать отдельно при статической линковке, потому что при динамической они "собираются сами".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может, прописать зависимости забыли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×