Windows コンピューターに Stlport をインストールしました。Microsoft STL を VC10 の Stlport に置き換えるために、Stlport のヘッド ファイルをインクルード ディレクトリ (プロパティ ページ -> VC++ ディレクトリ -> インクルード ディレクトリ) に追加stl_port.lib
し、リンク ( Linker->Input->Additional Dependencies )、およびstlport.dll
検索ディレクトリ内。さらに、次のマクロも定義しました: STLP_DONT_USE_AUTO_LINK;_STLP_LEAKS_PEDANTIC;_STLP_USE_DYNAMIC_LIB
(C/C++->プリプロセッサ定義)。
STL関数を呼び出すとうまくいくようです。ただし、STL に依存するサードパーティ ライブラリ (lib および dll を含む) を呼び出すと、STL 競合の問題が発生します。私が推測する理由は、サードパーティのライブラリが Microsoft STL を使用しているためです。典型的なエラーは次のとおりです。
Error 2 error LNK2019: unresolved external symbol "void __cdecl cv::namedWindow(class stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXABV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@H@Z) referenced in function _main C:\Research\OpencvTest\OpencvTest.obj
また、ソース コードからサード パーティのライブラリをビルドしようとしましたが、同様のリンク エラーが発生しました。
grfmt_jpeg2000.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class stlp_std::allocator<char> __thiscall stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> >::get_allocator(void)const " (__imp_?get_allocator@?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@stlp_std@@QBE?AV?$allocator@D@2@XZ) referenced in function "class stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> > __cdecl stlp_std::operator+<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> >(char,class stlp_std::basic_string<char,class stlp_std::char_traits<char>,class stlp_std::allocator<char> > const &)" (??$?HDV?$char_traits@D@stlp_std@@V?$allocator@D@1@@stlp_std@@YA?AV?$basic_string@DV?$char_traits@D@stlp_std@@V?$allocator@D@2@@0@DABV10@@Z)
リンク エラーの問題を解決するにはどうすればよいか考えていました。ありがとう!