Jump to content
Compvision.ru
FingerScan

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

Recommended Posts

Добрый день!

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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-файл. Очень удобно.

Share this post


Link to post
Share on other sites
Перекомпилировать придется, пересоздавать проекты нужды нет.

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

......

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

gz может GZip ?)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

при использовании в проекте статических либ и попытке использования 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 отдельно подключаю.

Share this post


Link to post
Share on other sites

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

  • Like 1

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×