2011-08-02 10 views
0

Qtを有効にしてQt 4.3.7とOpenCV 2.3の両方をビルドして実行しました。OpenCV 2.3 with Qt 4.3.7

cvNamedWindow("video", 0); 

完全なQtインターフェイスを正常にロードしました。素晴らしい:)

ただし、私は、コマンド

void callbackButton(int state, void* userdata){ 
int x; 
x=3; 
} 

cvCreateButton(nameb2,callbackButton,nameb2,CV_CHECKBOX,0); 

を使用するとき、私は、エラーメッセージ

error LNK2001: unresolved external symbol _cvCreateButton 

を取得Qtのインターフェイスがすでに上のボタンの多くを持っていると私は理解していませんか?誰かが私がこれを引き起こす可能性があるインクルードから逃しているものを説明してもらえますか?

ありがとうございます!

答えて

0

これはリンクエラーです。 opencv .libファイルをプロジェクトライブラリのパスに追加してみます。 これは役立ちます:VS2010 OpenCV

編集

洗練された問題:でも、リンクが失敗するプロジェクトにどのOpenCVの libaryを追加する場合。

理由:シンボルはライブラリ内に存在しないことがよくあります。

解決方法:いくつかの設定を変更して、自分でコンパイルする必要があります。

も参照してください:openCV 2.2 createButton LNK 2019 error in Visual Studio 2010

0

あなたはcvCreateButtonに呼び出すための間違ったパラメータを使用します。文書によるとhere関数のシグネチャは

cvCreateButton(const char* button_name CV_DEFAULT(NULL), CvButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL), int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0) 

であり、サンプルの呼び出しは、次のとおりです。

CV_EXTERN_C_FUNCPTR(*CvButtonCallback)(int state, void* userdata)); 

あなたが得る:

cvCreateButton(NULL,callbackButton); 
cvCreateButton("button2",callbackButton,NULL,CV_CHECKBOX,0); 
cvCreateButton("button3",callbackButton,&value); 
cvCreateButton("button5",callbackButton1,NULL,CV_RADIOBOX); 
cvCreateButton("button6",callbackButton2,NULL,CV_PUSH_BUTTON,1); 

とコールバック関数の宣言がなければなりませんcvCreateButtonにextern "C"リンケージがあるため、コンパイルエラーではなくリンクエラーです。つまり、コンパイル時にパラメータをチェックすることはできません。

0

3番目の引数はvoid*である必要があります。変更:

cvCreateButton(nameb2,callbackButton,NULL,CV_CHECKBOX,0); 

となります。

編集

上記のステートメントはエラーを与えられました。 3番目に必要な引数は "void *"です。これは何とも互換性があり、したがってCやC++のいずれも、あなたが提供しているものに問題がないはずです。これでリンカエラーを発生させることはできません。

リンカエラーがコード化される唯一の理由は、C++でプロトタイプ(ヘッダファイルを使用するのを忘れた)を使用していないときに、C++はそれ自体でライブラリの一部ではない。そのような場合、コンパイラはまずコンパイル時にプロトタイプ(CおよびC++用)が見つからないという警告を表示し、リンカはおそらくエラーを発生させます(C++のみ)。

コンパイラからのプロトタイプ警告が表示されない場合、それは問題ではありません。

0

私はこの問題を、cvCreateButtonではなくcv :: createButton関数を呼び出すことで解決しました(これはOpenCV2でメソッドを呼び出す方法が正しい場合です)。