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
ZLIB ソース コードのファイルdeflate.cで、この関数がzcfreeとzcallocの 2 つの関数の実装を見つけることができないと推測します。その理由は、 Nurbsライブラリが関数zcfreeとzcallocをカスタマイズするためです。これは 2 つのステップで行われます。
Nurbsライブラリ コードでzcallocとzcfreeをカスタマイズします。
opennurbs_zlib.h extern "C" { voidpf zcalloc (voidpf, unsigned, unsigned); void zcfree (voidpf, voidpf); }
これら 2 つの関数は、ファイル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); }
- フラグ MY_ZCALLOC および Z_PREFIX を使用して ZLIB ライブラリをコンパイルします。
確認したところ、これら 2 つの手順は両方とも完了していますが、リンク エラーがまだ発生するのはなぜですか。
アドバイスをいただけますか?本当にありがとう!
更新: @Dale Lear: ご支援いただきありがとうございます。しかし、私の状況は異なります。代わりに、opennurbs.lib とリンクする場合は、opennurbs のソース コードを自分のプロジェクトに統合しようとしました (点群ライブラリのサーフェス モジュールのように: http://www.pointclouds.org/blog/trcs/moerwald/ )。opennurbs ソリューションのプロジェクト zlib から zlib をビルドします。この zLib は、変更された zconfig.h (Z_PREFIX と Z_MYCALL が定義されていると思います) を使用してビルドされています。これは、関数 zfree と zalloc がまだ実装を待っていることを意味します。しかし、ZLib が opennurbs_zlib_memory.cpp から zcfree() と zcalloc を取得しないのはなぜですか。なぜかかるのかわかりません。