質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

Q&A

解決済

1回答

1856閲覧

KinectV2 VisualStudio2017でのLNK2019

despell

総合スコア10

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Kinect

Kinect(キネクト)はマイクロソフトから発売されたジェスチャー・音声認識によって 操作ができるデバイスです。

0グッド

0クリップ

投稿2017/11/16 11:29

###前提・実現したいこと
現在KinectV2を用いたプロジェクションマッピングを開発しようと思っています。
開発環境VisualStudio2017でサンプルを開いた際LNK2019が出てしまいました。
ほかのサイトを見て確認してみたのですがリンカー等に異常は見られませんでした。
OpenCVはNuGetパッケージをもちいて2.4.1をインストールしています。

###発生している問題・エラーメッセージ

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル "public: __cdecl cv::Exception::Exception(int,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (??0Exception@cv@@QEAA@HAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@00H@Z) が関数 "public: __cdecl cv::Mat::Mat(int,int,int,void *,unsigned __int64)" (??0Mat@cv@@QEAA@HHHPEAX_K@Z) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 警告 C4267 '引数': 'size_t' から 'UINT' に変換しました。データが失われているかもしれません。 Kinect開発 c:\users\kanazawa\desktop\卒業研究\kinect開発\kinect開発\main.cpp 115 エラー LNK2019 未解決の外部シンボル "public: virtual __cdecl cv::Exception::~Exception(void)" (??1Exception@cv@@UEAA@XZ) が関数 "public: __cdecl cv::Mat::Mat(int,int,int,void *,unsigned __int64)" (??0Mat@cv@@QEAA@HHHPEAX_K@Z) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::error(class cv::Exception const &)" (?error@cv@@YAXAEBVException@1@@Z) が関数 "public: __cdecl cv::Mat::Mat(int,int,int,void *,unsigned __int64)" (??0Mat@cv@@QEAA@HHHPEAX_K@Z) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::fastFree(void *)" (?fastFree@cv@@YAXPEAX@Z) が関数 "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "public: __cdecl cv::_InputArray::_InputArray(class cv::Mat const &)" (??0_InputArray@cv@@QEAA@AEBVMat@1@@Z) が関数 "private: void __cdecl KinectApp::drawColorFrame(void)" (?drawColorFrame@KinectApp@@AEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "public: __cdecl cv::_OutputArray::_OutputArray(class cv::Mat &)" (??0_OutputArray@cv@@QEAA@AEAVMat@1@@Z) が関数 "private: void __cdecl KinectApp::drawColorFrame(void)" (?drawColorFrame@KinectApp@@AEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "public: void __cdecl cv::Mat::deallocate(void)" (?deallocate@Mat@cv@@QEAAXXZ) が関数 "public: void __cdecl cv::Mat::release(void)" (?release@Mat@cv@@QEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "int __cdecl cv::_interlockedExchangeAdd(int *,int)" (?_interlockedExchangeAdd@cv@@YAHPEAHH@Z) が関数 "public: void __cdecl cv::Mat::release(void)" (?release@Mat@cv@@QEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::resize(class cv::_InputArray const &,class cv::_OutputArray const &,class cv::Size_<int>,double,double,int)" (?resize@cv@@YAXAEBV_InputArray@1@AEBV_OutputArray@1@V?$Size_@H@1@NNH@Z) が関数 "private: void __cdecl KinectApp::drawColorFrame(void)" (?drawColorFrame@KinectApp@@AEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z) が関数 "public: void __cdecl KinectApp::run(void)" (?run@KinectApp@@QEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK2019 未解決の外部シンボル "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_InputArray@1@@Z) が関数 "private: void __cdecl KinectApp::drawColorFrame(void)" (?drawColorFrame@KinectApp@@AEAAXXZ) で参照されました。 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\Kinect開発\Main.obj 1 エラー LNK1120 11 件の未解決の外部参照 Kinect開発 C:\Users\kanazawa\Desktop\卒業研究\Kinect開発\x64\Debug\Kinect開発.exe 1

###該当のソースコード

#include <iostream> #include <sstream> #include <map> #include <Kinect.h> #include <opencv2/opencv.hpp> #include <atlbase.h> // 次のように使います // ERROR_CHECK( ::GetDefaultKinectSensor( &kinect ) ); // 書籍での解説のためにマクロにしています。実際には展開した形で使うことを検討してください。 #define ERROR_CHECK( ret ) \ if ( (ret) != S_OK ) { \ std::stringstream ss; \ ss << "failed " #ret " " << std::hex << ret << std::endl; \ throw std::runtime_error( ss.str().c_str() ); \ } using namespace cv; class KinectApp { private: // Kinect SDK CComPtr<IKinectSensor> kinect = nullptr; CComPtr<IColorFrameReader> colorFrameReader = nullptr; int colorWidth; int colorHeight; unsigned int colorBytesPerPixel; ColorImageFormat colorFormat = ColorImageFormat::ColorImageFormat_Bgra; // 表示部分 std::vector<BYTE> colorBuffer; public: ~KinectApp() { // Kinectの動作を終了する if (kinect != nullptr) { kinect->Close(); } } // 初期化 void initialize() { // デフォルトのKinectを取得する ERROR_CHECK(::GetDefaultKinectSensor(&kinect)); ERROR_CHECK(kinect->Open()); // カラーリーダーを取得する CComPtr<IColorFrameSource> colorFrameSource; ERROR_CHECK(kinect->get_ColorFrameSource(&colorFrameSource)); ERROR_CHECK(colorFrameSource->OpenReader(&colorFrameReader)); // デフォルトのカラー画像のサイズを取得する CComPtr<IFrameDescription> defaultColorFrameDescription; ERROR_CHECK(colorFrameSource->get_FrameDescription(&defaultColorFrameDescription)); ERROR_CHECK(defaultColorFrameDescription->get_Width(&colorWidth)); ERROR_CHECK(defaultColorFrameDescription->get_Height(&colorHeight)); ERROR_CHECK(defaultColorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel)); std::cout << "default : " << colorWidth << ", " << colorHeight << ", " << colorBytesPerPixel << std::endl; // カラー画像のサイズを取得する CComPtr<IFrameDescription> colorFrameDescription; ERROR_CHECK(colorFrameSource->CreateFrameDescription( colorFormat, &colorFrameDescription)); ERROR_CHECK(colorFrameDescription->get_Width(&colorWidth)); ERROR_CHECK(colorFrameDescription->get_Height(&colorHeight)); ERROR_CHECK(colorFrameDescription->get_BytesPerPixel(&colorBytesPerPixel)); std::cout << "create : " << colorWidth << ", " << colorHeight << ", " << colorBytesPerPixel << std::endl; // バッファーを作成する colorBuffer.resize(colorWidth * colorHeight * colorBytesPerPixel); } void run() { while (1) { update(); draw(); auto key = cv::waitKey(10); if (key == 'q') { break; } } } private: // データの更新処理 void update() { updateColorFrame(); } // カラーフレームの更新 void updateColorFrame() { // フレームを取得する CComPtr<IColorFrame> colorFrame; auto ret = colorFrameReader->AcquireLatestFrame(&colorFrame); if (FAILED(ret)) { return; } // 指定の形式でデータを取得する ERROR_CHECK(colorFrame->CopyConvertedFrameDataToArray( colorBuffer.size(), &colorBuffer[0], colorFormat)); } // データの表示処理 void draw() { drawColorFrame(); } // カラーデータの表示処理 void drawColorFrame() { #if 0 // カラーデータを表示する cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); cv::imshow("Color Image", colorImage); #else cv::Mat colorImage(colorHeight, colorWidth, CV_8UC4, &colorBuffer[0]); cv::Mat harfImage; cv::resize(colorImage, harfImage, cv::Size(), 0.5, 0.5); cv::imshow("Harf Image", harfImage); #endif } }; void main() { try { KinectApp app; app.initialize(); app.run(); } catch (std::exception& ex) { std::cout << ex.what() << std::endl; } }

###試したこと
https://oshiete.goo.ne.jp/qa/9310033.html
https://teratail.com/questions/45146
以上のサイトを参考にし確認

###補足情報(言語/FW/ツール等のバージョンなど)
KinectSDKv2.0_1409
VisualStudio2017C++

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こちらの質問と原因は同様かと思います。teratail - KINECTv2のエラーについて
OpenCVのバージョンが異なるため、ところどころ読み替える必要はありますが。


万が一のリンク切れの対策として、以下に同じ内容を示します。
引用の形式で記述しますが、当該回答も私が書いたものです。

OpenCVのリンクを設定していないのが問題です。

OpenCVがないのならインストールしてください。

もしあるのなら、『追加のライブラリディレクトリ』『追加の依存ファイル』にOpenCVに関する設定を書き込む必要があります。


インストールが終わりましたら、次の設定をお忘れなく。

  • 環境変数pathへの登録

OpenCVの〇〇.dllのあるディレクトリを追加してください。要再起動。
私の環境の場合、OpenCV310\x64\vc14\binでした。

  • 『追加のインクルードディレクトリ』の設定追加

opencv.hppが入っている、opencv2ディレクトリのあるディレクトリを追加(回りくどい)。
私の環境の場合、C:\OpenCV310\includeでした。

  • 『追加のライブラリディレクトリ』の設定追加

OpenCVの〇〇.libのあるディレクトリを追加してください。
私の環境の場合、C:\OpenCV310\x64\vc14\libでした。

  • 『追加の依存ファイル』の設定追加

とりあえず次を設定しておいてください。後は適宜エラーを見つつ追加すればよいです。
opencv_core310.lib opencv_highgui310.lib

  • 実行の設定 (任意)

x64のリリースモードに合わせた方が色々楽です。


『追加の依存ファイル』が不足している場合、次のサイトを確認して情報を集めてください。

『3.1モジュール構成』を参考にしてください。少し古いので、適宜読み替える必要があります。

少々読みづらいですが、情報が網羅されています。

cv::lineの場合、opencv_imgproc310.libを追加する必要があることがわかります。

投稿2017/11/16 11:45

編集2017/11/16 11:52
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

despell

2017/11/16 12:05

上記の内容も一度試していたのですが...。 おそらくミスがあったのだと思います。もう一度こちらのやり方を試したところ すべてが消えたわけではありませんが多くLNK2019が消えました。 ありがとうございます。 あとは自分で頑張ってみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問