2011-12-27 35 views
2

と(OpenCVのを使用してCで、)ロブ・ヘスのSIFTライブラリをリンクします。私は、を介して他のSIFTの実装(のコード)を見てきたが、これは、ほとんどの位相分割元ロウズ紙のように見えたし、また、私は精通していますOpenCVのを使用していますので、私はこの1つを選びました。は、私は私のC++のプロジェクトで<a href="http://blogs.oregonstate.edu/hess/code/sift/" rel="nofollow">Rob Hess's SIFT library</a>を使用しようとしているC++

は残念ながら、私はC++でそれを使用してみましたので、唯一の問題を持っていました。ライブラリはもともとOpenCVでC言語で書かれています。

私はexternと-Sが含まれるとし、Cライブラリを囲むことなく、両方の私のコードをコンパイルしようとしたが、どちらも作品てきました。どちらの場合でも問題が何かを診断したと思いますが、解決方法はわかりませんし、何か助けていただければ幸いです。 (私は問題があると思い何か少なくとも、)

問題:extern withouth

  • :なぜならC++ネーム・マングリングでは動作しません(私がチェックし、そしてもちろん、すべての関数ました名前は装飾されています)

  • extern:OpenCVはCまたはC++用にコンパイルされた天気を検出できるため、機能しません。このようなエラーの存在SIFTライブラリ関数のどれかを持つ連携の問題はありませんが、今OpenCVのは、C++のヘッダーが含まれており、それが最終的にexternブロックに含まれているメインプログラムであるため、私は(文字通りhundereds)を取得:

    /usr/local/include/opencv2/core/mat.hpp:2361: error: template with C linkage

    誰もがCで同じSIFTライブラリで動作するようにしようとしました++または別のライブラリと同様の問題を経験している場合、ヘルプはほとんどのだろうので、私は、日の最後のカップルのためにこの仕事をしようとしてきた

感謝。私はかなり良い解決策を見つけることができたよう

答えて

3

が見えます。簡単かつエレガントな二つの方法、:

簡単:

ちょうどすべてSIFTライブラリヘッダを含むextern "C"セクション、すべてのライブラリで使用OpenCVのヘッダ(および必要に応じて他のOpenCVのヘッダ)が含まれます。すべてのライブラリのヘッダで

エレガント

、そのようOpenCVのは、含まれを除くすべてのコード周りのセクションextern "C"追加:

// OpenCV includes: 
#include "cxcore.h" 
#include .... 

#if __cplusplus 
extern "C" { 
#endif 

... 
function definitions in the header file 
... 

#if __cplusplus 
} 
#endif 

今、すべてのライブラリが#includeすることができ含みをdをextern "C"なしで直接C++コードに追加します。 OpenCVライブラリはC/C++(コンパイラによって異なる)に対して正しくコンパイルされ、追加のOpenCVインクルードの相対的な順序が含まれ、SIFTライブラリのインクルードは関係ありません。

+0

私は2日以上のための私自身の答えを受け入れることができないように見えますが、これは問題を解決し、私はできるだけ早く私はできるように私の答えを受け入れるだろう。これは他の誰かを助けることを願って:) – penelope

関連する問題

 関連する問題