Интегрируя библиотеку Nurbs (http://www.rhino3d.com/opennurbs) в свой проект, я столкнулись со следующей ошибкой связывания с библиотекой zlib.
1>zlib.lib(deflate.obj) : error LNK2019: unresolved external symbol _zcfree referenced in function _z_deflateInit2_
1>zlib.lib(inflate.obj) : error LNK2001: unresolved external symbol _zcfree
1>zlib.lib(deflate.obj) : error LNK2019: unresolved external symbol _zcalloc referenced in function _z_deflateInit2_
1>zlib.lib(inflate.obj) : error LNK2001: unresolved external symbol _zcalloc
я проверил функцию
z_deflateInit2
в файле deflate.c из исходного кода ZLIB и предположить, что эта функция не может найти реализацию двух функций zcfree и zcalloc. Причина в том, что библиотека Nurbs настраивает функции zcfree и zcalloc, что выполняется в два этапа.
Настройте zcalloc и zcfree в коде библиотеки Nurbs.
opennurbs_zlib.h extern "C" { voidpf zcalloc (voidpf, unsigned, unsigned); void zcfree (voidpf, voidpf); }
Эти две функции реализованы в файле opennurbs_zlib_memory.cpp следующим образом.
#define voidpf z_voidpf voidpf zcalloc (voidpf, unsigned items, unsigned size) { return oncalloc(items, size); } void zcfree (voidpf, voidpf ptr) { onfree(ptr); }
- Скомпилируйте библиотеку ZLIB с флагом: MY_ZCALLOC и Z_PREFIX
Как я проверил, оба этих шага выполнены, но почему я все еще получаю ошибку связывания.
Не могли бы вы дать мне несколько советов? Большое спасибо!
Обновление: @Dale Lear: спасибо за вашу поддержку. Но у меня другая ситуация. Вместо этого при связывании с opennurbs.lib я попытался интегрировать исходный код opennurbs в свой проект (например, поверхностный модуль библиотеки облаков точек: http://www.pointclouds.org/blog/trcs/moerwald/). Я собираю zlib из проекта zlib в решении opennurbs. Эта zLib собрана с модифицированным zconfig.h (Z_PREFIX и Z_MYCALL, наверное, определены). Это означает, что функции zfree и zalloc еще ждут реализации. Но почему ZLib не берет zcfree() и zcalloc из opennurbs_zlib_memory.cpp. Я не понимаю, зачем это нужно.