Opencv関連で発生するlnk2019エラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
カロリー

Opencv関連で発生するlnk2019エラーについて

#1

投稿記事 by カロリー » 8年前

こんにちは、現在visual studio2017を用いてOpencv2,4,11を使用しているのですが、
以下のようなエラーが発生してしまい、手も足も出ません。
LNK2019 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) が関数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) で参照されました。
LNK2019 未解決の外部シンボル "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) が関数 _WinMain@16 で参照されました。
.
.
.
以下LNK2019の似たようなエラーが合計で10個
Opencvの導入にはNugetを用いました。

以下はサンプルコードです。

コード:

#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>

int WINAPI WinMain(HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow)
{
	// 幅320px、高さ240pxで赤色の画像データを生成

	cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));

	// 画像表示用のウィンドウを生成
	cv::namedWindow("red", cv::WINDOW_AUTOSIZE);

	// ウィンドウに画像を表示
	cv::imshow("red", redImg);

	// キー入力を待機
	cv::waitKey(0);

	// 作成したウィンドウを全て破棄
	cv::destroyAllWindows();

	return 0;
}

Math

Re: Opencv関連で発生するlnk2019エラーについて

#2

投稿記事 by Math » 8年前

Windows10,VS2017Cmmunity,Win32Console Project,x64を使用
リンカーにOpenCVの*.libを設定。

コード:

#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>

int main() {

	// 幅320px、高さ240pxで赤色の画像データを生成

	cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
	
	// 画像表示用のウィンドウを生成
	cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
	
	// ウィンドウに画像を表示
	cv::imshow("red", redImg);

	// キー入力を待機
	cv::waitKey(0);
	
	// 作成したウィンドウを全て破棄
	cv::destroyAllWindows();

	return 0;
}

コード:

>------ すべてのリビルド開始: プロジェクト:ConsoleApplication14, 構成: Debug x64 ------
1>c1.cpp
1>ConsoleApplication14.vcxproj -> D:\z17\c\ConsoleApplication14\x64\Debug\ConsoleApplication14.exe
1>ConsoleApplication14.vcxproj -> D:\z17\c\ConsoleApplication14\x64\Debug\ConsoleApplication14.pdb (Partial PDB)
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
画像

アバター
Dixq (管理人)
管理人
記事: 1662
登録日時: 14年前
住所: 北海道札幌市
連絡を取る:

Re: Opencv関連で発生するlnk2019エラーについて

#3

投稿記事 by Dixq (管理人) » 8年前

WIN32プロジェクトで実行されているようですので、
WIN32コンソールアプリケーションのプロジェクトを作って試してみて下さい。
ss.png

Math

Re: Opencv関連で発生するlnk2019エラーについて

#4

投稿記事 by Math » 8年前

WinMain を使いたい場合 DxLib を真似て
Windows10,VS2017Community,開発者用コマンドプロンプト,x86の設定 で

コード:

#include "DxLib.h"
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>
 
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 幅320px、高さ240pxで赤色の画像データを生成
 
    cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
 
    // 画像表示用のウィンドウを生成
    cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
 
    // ウィンドウに画像を表示
    cv::imshow("red", redImg);
 
    // キー入力を待機
    cv::waitKey(0);
 
    // 作成したウィンドウを全て破棄
    cv::destroyAllWindows();
 
    return 0;
}
g.mak

コード:

TARGETNAME=g1

C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT  /Id:\dxlib /Id:\cv /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 

LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" d:\cv\opencv_core2411.lib d:\cv\opencv_highgui2411.lib 

ALL:
	cl $(C_FLAGS) $(TARGETNAME).cpp
	link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
	$(TARGETNAME).exe
g.bat

コード:

nmake -f g.mak
実行

コード:

D:\z17c\cv>g

D:\z17c\cv>nmake -f g.mak

Microsoft(R) Program Maintenance Utility Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /c /TP /EHsc /D "_MBCS" /MT  /Id:\dxlib /Id:\cv /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 g1.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.25019 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

g1.cpp
        link /out:g1.exe /SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" d:\cv\opencv_core2411.lib d:\cv\opencv_highgui2411.lib g1.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        g1.exe
画像

Math

Re: Opencv関連で発生するlnk2019エラーについて

#5

投稿記事 by Math » 8年前

追補

コード:

D:\z17c\cv>g

D:\z17c\cv>nmake -f g.mak

Microsoft(R) Program Maintenance Utility Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        cl /c /TP /EHsc /D "_MBCS" /MT  /Id:\dxlib /Id:\cv /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 g1.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.25019 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

g1.cpp
        link /out:g1.exe /SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" d:\cv\opencv_core2411.lib d:\cv\opencv_highgui2411.lib g1.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

        g1.exe

D:\z17c\cv>dir
 ドライブ D のボリューム ラベルがありません。
 ボリューム シリアル番号は 58DE-9924 です

 D:\z17c\cv のディレクトリ

2017/07/24  08:05    <DIR>          .
2017/07/24  08:05    <DIR>          ..
2016/10/07  13:35                14 g.bat
2017/07/24  07:44               512 g.mak
2017/05/09  19:31               501 g1 - コピー.cpp
2017/07/24  07:56               658 g1.cpp
2017/07/24  08:05            86,016 g1.exe
2017/07/24  08:05            25,803 g1.obj
2017/07/24  07:45            11,148 Log.txt
2015/02/26  21:01         2,149,888 opencv_core2411.dll
2015/02/26  21:02         2,160,640 opencv_highgui2411.dll
               9 個のファイル           4,435,180 バイト
               2 個のディレクトリ  102,006,517,760 バイトの空き領域

D:\z17c\cv>

Math

Re: Opencv関連で発生するlnk2019エラーについて

#6

投稿記事 by Math » 8年前

コード:

#include "DxLib.h"
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>
 
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 幅320px、高さ240pxで赤色の画像データを生成
 
    cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
 
    // 画像表示用のウィンドウを生成
    cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
 
    // ウィンドウに画像を表示
    cv::imshow("red", redImg);

        /* DxLib */

        ChangeWindowMode( TRUE ); // ウィンドウモード
        DxLib_Init(); // DXライブラリ初期化

        DrawString(30, 20, "DxLib: Hello World!", GetColor(255, 255, 255)); // 文字を書く

        WaitKey();   // キー入力があるまで待機
        DxLib_End(); // DXライブラリ終了処理

        /* DxLib */

    // キー入力を待機
    cv::waitKey(0);
 
    // 作成したウィンドウを全て破棄
    cv::destroyAllWindows();
 
    return 0;
}
とすると両方出ますね!
画像

アバター
asd
記事: 319
登録日時: 14年前

Re: Opencv関連で発生するlnk2019エラーについて

#7

投稿記事 by asd » 8年前

カロリー さんが書きました:こんにちは、現在visual studio2017を用いてOpencv2,4,11を使用しているのですが、
以下のようなエラーが発生してしまい、手も足も出ません。
LNK2019 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPAX@Z) が関数 "public: __thiscall cv::Mat::~Mat(void)" (??1Mat@cv@@QAE@XZ) で参照されました。
LNK2019 未解決の外部シンボル "public: __thiscall cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QAE@ABVMat@1@@Z) が関数 _WinMain@16 で参照されました。
.
.
.
以下LNK2019の似たようなエラーが合計で10個
Opencvの導入にはNugetを用いました。
手元にVS2017の環境がないので検索で得られた参考情報の提示です。
的外れでしたらごめんなさい。

Nugetを用いたインストールを行っているとのことでOpenCV側がVisualStudio2017の環境に対応しきれておらず、
リンクに失敗している可能性もあるかと思います。

作成されたプロジェクトの「プラットフォームツールセット」をVS2013(v120)に変更してうまく動くようにならないでしょうか?

(参考)
http://qiita.com/konta220/items/f23f50decbae1133d198
Advanced Supporting Developer
無理やりこじつけ(ぉ

Math

Re: Opencv関連で発生するlnk2019エラーについて

#8

投稿記事 by Math » 8年前

No: 2 は Nugetを用いました。
>リンカーにOpenCVの*.libを設定。
が原因ですよ(^^;
http://claimant.cocolog-nifty.com/blog/ ... -2b05.html
ここからhttps://ja.osdn.net/projects/sfnet_open ... .4.11.exe/
とってきて設定すればいいですよ。
(いま必要なのは2つだけのはず)

Math

Re: Opencv関連で発生するlnk2019エラーについて

#9

投稿記事 by Math » 8年前

No: 2 は Nugetを用いました。
>リンカーにOpenCVの*.libを設定。
が原因ですよ(^^;
http://claimant.cocolog-nifty.com/blog/ ... -2b05.html
ここからhttps://ja.osdn.net/projects/sfnet_open ... .4.11.exe/
とってきて設定すればいいですよ。
(いま必要なのは2つだけのはず)

アバター
asd
記事: 319
登録日時: 14年前

Re: Opencv関連で発生するlnk2019エラーについて

#10

投稿記事 by asd » 8年前

Math さんが書きました:No: 2 は Nugetを用いました。
>リンカーにOpenCVの*.libを設定。
が原因ですよ(^^;
http://claimant.cocolog-nifty.com/blog/ ... -2b05.html
ここからhttps://ja.osdn.net/projects/sfnet_open ... .4.11.exe/
とってきて設定すればいいですよ。
(いま必要なのは2つだけのはず)
No.2にはNugetを使った旨が書かれていなかったので代替案の提示だと思っていました。
私の提示した参考ページではリンカの設定は出てきていなかったですし。

つまりNugetを使った場合でもそれとは別にOpenCVをダウンロードし、そのインストール先をリンカに設定する必要があるということでしょうか?
Nugetだけで完結しないんですねぇ…。
Advanced Supporting Developer
無理やりこじつけ(ぉ

Math

Re: Opencv関連で発生するlnk2019エラーについて

#11

投稿記事 by Math » 8年前

>Nugetだけで完結しないんですねぇ…。
VS2015を使っていた時はいつも完結してたんですよ!
 
VS2017になにかあるのでしょうか...?

アバター
asd
記事: 319
登録日時: 14年前

Re: Opencv関連で発生するlnk2019エラーについて

#12

投稿記事 by asd » 8年前

Math さんが書きました:>Nugetだけで完結しないんですねぇ…。
VS2015を使っていた時はいつも完結してたんですよ!
 
VS2017になにかあるのでしょうか...?
No.7の推測が正しければNugetのOpenCVパッケージが現時点ではVS2015には対応していてVS2017への対応がしきれていないのではと思うので、
プラットフォームツールセットをVisualStudio2015(v140)にするとうまくいくかもしれませんね。

これ以上は質問者さんを待ちたいと思います。
Advanced Supporting Developer
無理やりこじつけ(ぉ

カロリー

Re: Opencv関連で発生するlnk2019エラーについて

#13

投稿記事 by カロリー » 8年前

考察と改善策を提示していただきありがとうございます。
僕はWin32apiも使用したいのでOpenCVをWinMain内で使用したいと考えています。

プラットフォームツールセットをVisual Studio 2015 (v140)に変更してみましたがエラーは全く変化しませんでした。
学校ではviaual studio2015を使用しているのですが特に大きく変化を加えずにもNugetから全く同じバージョンのOpenCVをダウンロード、実行できました。
家でもvisual studo2015を全く同じ手順で導入し、同じプログラムを入力してもリンカエラーが発生するのでなおさら不思議です。
上記で書いていただきました開発者用コマンドプロンプトを使用する方法は、僕自身コマンドプロンプト周りの知識が疎いので
調査をして行ってみるようにします。

アバター
asd
記事: 319
登録日時: 14年前

Re: Opencv関連で発生するlnk2019エラーについて

#14

投稿記事 by asd » 8年前

カロリー さんが書きました: プラットフォームツールセットをVisual Studio 2015 (v140)に変更してみましたがエラーは全く変化しませんでした。
学校ではviaual studio2015を使用しているのですが特に大きく変化を加えずにもNugetから全く同じバージョンのOpenCVをダウンロード、実行できました。
家でもvisual studo2015を全く同じ手順で導入し、同じプログラムを入力してもリンカエラーが発生するのでなおさら不思議です。
上記で書いていただきました開発者用コマンドプロンプトを使用する方法は、僕自身コマンドプロンプト周りの知識が疎いので
調査をして行ってみるようにします。
確認ありがとうございました。
プラットフォームツールセットの変更では対応できなかったようで失礼しました。
(となるとVisual Studio 2013(v120)でも同じですかね…)

Mathさんの投稿を見るとやたらとコマンドプロンプトを駆使しないといけないような感じがしますが、
問題となっているのはOpenCVのlibファイルが見つからず関数の実体が見つからないことによるエラーなので、
No.8にあるように別個にOpenCVのライブラリをインストールした上で、リンカの設定にlibファイルを設定することで動くようにはなるかと思います。
(Nugetで完結しないのですねと言ったのはこのためです)

学校と家で同じ2015を使っても動作が異なるのは気になるところですが、時間と根気があれば学校と家との設定の際を比較して原因を突き止めるもよし、
時間がなさそうなら別個にlibファイルを入手、リンカに設定して動作するようにしてもよしといったところでしょうか。
お力になれず申し訳ない限りです(´・ω・`)
Advanced Supporting Developer
無理やりこじつけ(ぉ

Math

Re: Opencv関連で発生するlnk2019エラーについて

#15

投稿記事 by Math » 8年前

>学校ではviaual studio2015を使用しているのですが特に大きく変化を加えずにもNugetから全く同じバージョンのOpenCVをダウンロード、実>行できました。
>家でもvisual studo2015を全く同じ手順で導入し、同じプログラムを入力してもリンカエラーが発生するのでなおさら不思議です。
>上記で書いていただきました開発者用コマンドプロンプトを使用する方法は、僕自身コマンドプロンプト周りの知識が疎いので
>調査をして行ってみるようにします。
家ではVS2017ではなかったですか?
全体に詳細の説明を省いてあるので今夜時間があればデテールを説明します。開発者用コマンドプロンプトは特にVS2015からは有用で慣れるとIDEが面倒になりますよ!。(^^;

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: Opencv関連で発生するlnk2019エラーについて

#16

投稿記事 by usao » 8年前

オフトピック
私もちょっと前にNugetでOpenCVは全然ダメで諦めました.
詳細なエラーの記憶,記録はありませんが,

CV 2.4.10 : LINKエラーでダメだった模様.
CV 3.1 : ビルドまでは行けるが,x86だとMat::create()で例外出る.(x64ならいける?)

という感じでした.(VSは2015)

OpenCVのサイトからバイナリをDLしてきて使った方が早いし確実だし,
わざわざNugetとかいうのを使う利点が微塵も無いように思いました(個人の見解です)

カロリー

Re: Opencv関連で発生するlnk2019エラーについて

#17

投稿記事 by カロリー » 8年前

Nugetはあきらめて公式パッケージを使用した方法もしてみましたが同じくLNK2019エラーが発生してしまいました。。。
困ったものとしか言えません

ちなみに導入はこちらのサイトを参考にさせていただきましたhttp://www.buildinsider.net/small/opencv/003

Math

Re: Opencv関連で発生するlnk2019エラーについて

#18

投稿記事 by Math » 8年前

>僕はWin32apiも使用したいのでOpenCVをWinMain内で使用したいと考えています。
OpenCVはWIN32プロジェクトでもWIN32コンソールアプリケーションでも使えます。念の為にWindows10,VS2017Cmmunity,WIN32プロジェクト,x86版を試してみましたが同じ設定で動きました。

Math

Re: Opencv関連で発生するlnk2019エラーについて

#19

投稿記事 by Math » 8年前

VS2015、Roslynとは
 ”普段、IDE(統合開発環境)を利用してコーディングする際、その背後ではどのようなプロセスが働いているか、考えてみ...
 これらのことから、求められている“成果物”は違うとしても、IDE側とコンパイラー側の双方で同様な処理を行う部分が発生する。開発チームは、この双方の保守が必要となる上、特に新機能を追加する場合は、IDE側とコンパイラー側の仕様を合わせる必要があり、その調整には非常に労力がかかる。

 これらの問題を解消するため、IDE側にとって必要な「リアルタイム処理性」や「ソースコードが途中で変更された場合への柔軟な対応」などの要件を満たし、中間情報をAPI経由で取得可能な、新しいコンパイラーの開発が必要とされた。それがRoslynである。"
http://www.buildinsider.net/enterprise/roslyn/01

とあるようにMicrosoftが長年の挫折を乗り越えコンパイラの1本化に成功した画期的なVersionです。

コマンドプロンプトがIDEと同じになったので 勉強の為にも“開発者コマンドプロンプト”を使用してみることをお勧めします。
私のホームページhttp://cswin10.nisinippon.com/cs/cs1/vs ... /dx01.htmlを実行してみてください。
コマンドプロンプト版の説明はそれをもとに同じようにOpenCVに適用したものです。

 

Math

Re: Opencv関連で発生するlnk2019エラーについて

#20

投稿記事 by Math » 8年前

[IDEのリンカーの設定]
https://ja.osdn.net/projects/sfnet_open ... .4.11.exe/からってきた
opencv-2.4.11.exeを解凍しopencvをD:\ 直下に置くものとする。

次のように設定する。
画像
画像
これでリンク エラーはなくまります。

[実行時DLLの設定]
C:\Users\kk\Downloads\opencv\build\x86\vc11\bin から
画像

Math

Re: Opencv関連で発生するlnk2019エラーについて

#21

投稿記事 by Math » 8年前

コマンドプロンプト版はdxlibをまねてd:\cvの下に必要なincude,libを入れたものです。
画像

Math

Re: Opencv関連で発生するlnk2019エラーについて

#22

投稿記事 by Math » 8年前

No: 5 のように実行時 .dll が必要です。!

カロリー

Re: Opencv関連で発生するlnk2019エラーについて

#23

投稿記事 by カロリー » 8年前

解決しました!
原因はopencv3.0以降とopencv2.4.11だとリンクするライブラリが違く
(opencv3.0だとopencv_worldを追加の依存ファイルに入れればよかった)
opencv3.0で2.4.11の設定(または逆)をしていたので手順が正しくてもずっとリンクエラーが出ていた模様です。

アバター
asd
記事: 319
登録日時: 14年前

Re: Opencv関連で発生するlnk2019エラーについて

#24

投稿記事 by asd » 8年前

カロリー さんが書きました:解決しました!
原因はopencv3.0以降とopencv2.4.11だとリンクするライブラリが違く
(opencv3.0だとopencv_worldを追加の依存ファイルに入れればよかった)
opencv3.0で2.4.11の設定(または逆)をしていたので手順が正しくてもずっとリンクエラーが出ていた模様です。
解決報告ありがとうございました。
なるほど、導入しようとしているバージョンと、設定のバージョンが食い違っていたのですね。
原因がわかって勉強になりました。

ほとんどお力にはなれていませんが無事に解決できておめでとうございました(*´ヮ`)
Advanced Supporting Developer
無理やりこじつけ(ぉ

返信

“C言語何でも質問掲示板” へ戻る