質問: ### 前提・実現したいこと OpenCVの機能を利用したMFCアプリをx86環境向けに作成する必要があり開発をしようとしています。 コンパイルでリンカエラーが発生し行き詰っています。 (安定版として最新であるらしいため)OpenCV3.4.1を使用しています。 OpenCV3.4.1のインストーラではx64用APIのみなのでCMakeを利用した方法を調べて実行しました。 CMakeを利用してOpenCVのソリューションを作成しVisualStudio2015でビルドするところまでは行えました。 ### 発生している問題・エラーメッセージ しかし新しくソリューションを作成してOpenCVを用いたサンプルを試しに動かそうとしてDebug構成でビルドを実行するとリンカエラーが発生します。 エラーを以下に列挙します ``` エラー LNK2019 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) が関数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) で参照されました。 ``` ``` エラー LNK1120 5 件の未解決の外部参照 ``` ``` エラー LNK2001 外部シンボル ""private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ)" は未解決です。 ``` ``` エラー LNK2019 未解決の外部シンボル "class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z) が関数 "public: void __thiscall CExperimentOpenCVDlg::OnBnClickedOk(void)" (?OnBnClickedOk@CExperimentOpenCVDlg@@QAEXXZ) で参照されました。 ``` ``` エラー LNK2019 未解決の外部シンボル "private: char * __thiscall cv::String::allocate(unsigned int)" (?allocate@String@cv@@AAEPADI@Z) が関数 "public: __thiscall cv::String::String(char const *)" (??0String@cv@@QAE@PBD@Z) で参照されました。 ``` ``` エラー LNK2019 未解決の外部シンボル "private: void __thiscall cv::String::deallocate(void)" (?deallocate@String@cv@@AAEXXZ) が関数 "public: __thiscall cv::String::~String(void)" (??1String@cv@@QAE@XZ) で参照されました。 ``` ``` エラー LNK2019 未解決の外部シンボル "public: void __thiscall cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QAEXXZ) が関数 "public: void __thiscall cv::Mat::release(void)" (?release@Mat@cv@@QAEXXZ) で参照されました。 ``` OpenCV3.4.1のバージョンではx86アプリケーションで利用は不可能になっているのでしょうか。 その場合VisualStudio2015で開発したx86MFCアプリケーションで利用可能なOpenCVのバージョンが知りたいです。 または、利用可能だが設定すべき項目があるならばご指摘いただけたら幸いです。 よろしくお願いいたします。 ### 該当のソースコード ``` void CExperimentOpenCVDlg::OnBnClickedOk() { // TODO: ここにコントロール通知ハンドラー コードを追加します。 cv::imread("hoge.jpg");//リンカエラーなのでimreadを呼んだだけでもコケる //CDialogEx::OnOK(); } ``` ### 問題を解決するコード ``` #ifdef DEBUG #pragma comment(lib,"opencv2\opencv_imgcodecs341d.dll") #else #pragma comment(lib,"opencv2\opencv_imgcodecs341.dll") #endif ``` ### 試したこと OpenCVのライブラリの生成がうまくいっていないのかと思い `%OpenCV.slnのあるフォルダ%\install\x86\vc14\lib`を参照してみました 34ファイルほどlibファイルが生成されていましたが結局何が不足しているのかわからないためあまり意味はありませんでした。 ### 補足情報(FW/ツールのバージョンなど) * Windows7/64bit SP * VisualStudio2015 SP1 * C++/MFC * C Make 3.13.2 * OpenCV 3.4.1(VisualStudio2015で開発したMFCのx86アプリで動作するなら別のバージョンでも構いません)
回答: 適切に32bitのlibをリンクできていないと推測します。 ライブラリのリンクの設定をどのように行ってますでしょうか。