トップ回答者
LINK 2019 エラー OpenCV2.1 VisualStudio2008 C++

質問
-
VisualStudio2008 でテレスカウターSDKを用いて開発を行おうとしています。
OpenCV2.1を導入しようと考えているのですが、ビルドして実行しようとすると
error LNK2019: 未解決の外部シンボル cvCreateCameraCapture が関数 WinMain で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。 (加筆)
というようなエラーが出ます。(OpenCVの関数部分でLINK2019エラーが発生する)
ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ にて
インクルードディレクトリに C:\OpenCV2.1\include\opencv
ライブラリディレクトリに C:\OpenCV2.1\lib
を追加しています。
また、プロジェクトのプロパティ→リンカ→入力→追加の依存ファイルに
cv210.lib cvaux210.lib cxcore210.lib highgui210.lib
を追加しています。
ソースコード先頭に
#include "cv.h"
#include "highgui.h"を追加しています。
(加筆)
また、プリプロセッサに
WIN64
を追加しています。
開発初心者でしてこれ以上どこをいじればいいのか分からず困っています…。
お分かりになる方がいらっしゃいましたら、ご教示くださいますよう、お願い申し上げます。
- 編集済み orange96 2014年9月10日 5:25
回答
-
また、プリプロセッサに WIN64 を追加しています。
そうではなくて64bitアプリケーションを作成しようとしているのでしょうか? であれば配布されているOpenCVは32bitライブラリとしてビルドされているため、64bitアプリケーションを作成することはできません。
32bitアプリケーションとするか、ご自身でOpenCVをビルドし直す必要があります。質問とは別に指摘です。
インクルードディレクトリを「C:\OpenCV2.1\include」としたうえで、
#include <opencv/cv.h> #include <opencv/highgui.h>
と記述すべきです。cv.hでは他のライブラリとファイル名が競合し兼ねないですし、外部ヘッダーファイルを参照する際は "" ではなく <> を使います。(#include <stdio.h>と書きますよね?)
- 回答としてマーク orange96 2014年9月11日 6:33
すべての返信
-
さっそくのご返信ありがとうございます。
highgui.h内で
#define cvCaptureFromCAM cvCreateCameraCapture
が定義されているようで cvCaptureFromCAM() を用いた場合でも
error LNK2019: 未解決の外部シンボル cvCreateCameraCapture が関数 WinMain で参照されました。
のエラーが出ます。(highgui.h 自体はインクルードできているようです)
また、質問時に省略してしまっていたのですが、
fatal error LNK1120: 外部参照 1 が未解決です。
のエラーも出ています。(これがコンパイルエラーでしょうか)
-
#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cv210d.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cxcore210d.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cvaux210d.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\highgui210d.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\ml210d.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\opencv_ffmpeg210d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cv210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cxcore210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cvaux210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\highgui210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\cxts210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\ml210.lib")
#pragma comment(lib,"C:\\OpenCV2.1\\lib\\opencv_ffmpeg210.lib")
#endifを追記して試して見ましたがやはり
error LNK2019: 未解決の外部シンボル cvCreateCameraCapture が関数 WinMain で参照されました。
のエラーが出力されます。
プラットフォームがTele Scouter SDK なのが問題なのでしょうか…
-
また、プリプロセッサに WIN64 を追加しています。
そうではなくて64bitアプリケーションを作成しようとしているのでしょうか? であれば配布されているOpenCVは32bitライブラリとしてビルドされているため、64bitアプリケーションを作成することはできません。
32bitアプリケーションとするか、ご自身でOpenCVをビルドし直す必要があります。質問とは別に指摘です。
インクルードディレクトリを「C:\OpenCV2.1\include」としたうえで、
#include <opencv/cv.h> #include <opencv/highgui.h>
と記述すべきです。cv.hでは他のライブラリとファイル名が競合し兼ねないですし、外部ヘッダーファイルを参照する際は "" ではなく <> を使います。(#include <stdio.h>と書きますよね?)
- 回答としてマーク orange96 2014年9月11日 6:33
-
ご指摘ありがとうございます。
参考にしてヘッダー参照の部分を書き換えさせていただきました。
実はこのエラーが発生する前に
error C4235: 非標準の拡張機能が使用されています : '__asm' キーワードはこのアーキテクチャではサポートされていません
というエラーが出たのでプリプロセッサにWIN64を追加したところエラーが無くなったので放置していました。
プロジェクトファイル自体が自作したものではなく譲り受けたものなので確かではないのですが、おそらく64bitアプリケーションなのだと思います。
32bitアプリケーションに変更することは可能なのでしょうか?
-
[ビルド]-[構成マネージャー]から「アクティブソリューションプラットフォーム」がx64やARMでなくWin32となっていることを確認してください。より正確にはその下の表で「プラットフォーム」のカラムがWin32となることです。
独自のWIN64プリプロセッサ定義はトラブルの元ですので削除してください。 __asm の問題は解決しなければならない問題でしょうが、本件とは別件となると思います。
# ちなみに、手元のVS2013環境で試したところ、Win32プラットフォームで WIN64 を定義しただけではエラーになりませんでした。プラットフォームとしてWIN64が選択されている場合に質問のエラーが発生しました。