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

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

ただいまの
回答率

89.10%

KinectV2 VisualStudio2017でのLNK2019

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,503

despell

score 10

前提・実現したいこと

現在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++

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

こちらの質問と原因は同様かと思います。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のリリースモードに合わせた方が色々楽です。

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/16 21:05

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

    キャンセル

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

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る