0

私はC++を使用しており、「g++」を使用してOpenCV2にコンパイルおよびリンクしています。私を悩ませていることの 1 つは、古い cv プレフィックス付きの関数がまだすべて利用可能であり、アプリケーションを「汚染」していることです。

アプリケーションの範囲内で OpenCV1 C の cv プレフィックス付きの関数を使用できなくし、OpenCV2 のcv::名前空間を持つ関数だけを保持することは可能ですか?

注: 私はしばらく C を書いていないので、これがばかげた質問であるかどうか教えてください。

4

1 に答える 1

0

それはあなたが本当に必要なものに依存します。このコードを作成したいだけの場合:

CvArr *arr;
cvAvg(arr);
cvAcc(arr, arr);

「機能していません」-これを追加するだけです:

#define cvAvg nothing_interesting_cvAvg
#define cvAcc nothing_interesting_cvAcc
//you can change nothing_interesting_... to anything, but you can't use the same text more than once
//you include files
//...
//after your include files
#undef cvAvg
#undef cvAcc

OpenCVファイルを含める前。コードをコンパイルしようとすると、次のように表示されます。

error C3861: 'cvAvg': identifier not found

nothing_interesting_cvAvg(arr);の代わりに使用するようにコードを変更するcvAvg(arr);と、正常にコンパイルされますが、リンカは次の理由で失敗します。

: error LNK2019: unresolved external symbol _nothing_interesting_cvAvg referenced in function _main

これはこの 2 つの関数に対してのみ機能することに注意してください。そのため、「無効」にするすべての関数を見つけて、同様のコードを手動で記述する必要があります。
「無効化された」関数を使用する関数は、既にコンパイル、リンクなどされているため、正常に動作します。このファイルで何も変更せずに、いくつかのファイルからそれらを呼び出すだけです。

于 2013-01-11T08:42:51.000 に答える