2016-11-10 8 views
0

私はUbuntuにあり、カスタムディレクトリに別のバージョンのOpenCV(2.4.13)をインストールしたいと考えています。私はここでこのチュートリアルに従いました:http://code.litomisky.com/2014/03/09/how-to-have-multiple-versions-of-the-same-library-side-by-side/OpenCVはカスタムディレクトリでコンパイルできません

私はこの単純なmain.cppプログラムをコンパイルすることはできません。私はCV ::マット・イメージを作成することはできませんが、私はうまくOpenCVのバージョンを入手することができます!:ここで

#include <iostream> 
#include <opencv2/core/version.hpp> 
#include <opencv2/core/core.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc.hpp> 

int main(int argc, char ** argv) 
{ 
std::cout << "OpenCV version: " 
     << CV_MAJOR_VERSION << "." 
     << CV_MINOR_VERSION << "." 
     << CV_SUBMINOR_VERSION 
     << std::endl; 

cv::Mat image; //without this line, it works! 


return 0; 
} 

は私のメイクです:

/tmp/ccyrdd7H.o: In function `cv::Mat::~Mat()': 
main.cpp:(.text._ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x39): undefined reference to `cv::fastFree(void*)' 
/tmp/ccyrdd7H.o: In function `cv::Mat::release()': 
main.cpp:(.text._ZN2cv3Mat7releaseEv[cv::Mat::release()]+0x47): undefined reference to `cv::Mat::deallocate()' 
collect2: ld returned 1 exit status 
make: *** [test] Error 1 

CPP = g++ -std=c++0x 

# OpenCV 2.4.13 
CPPFLAGS = -L/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/lib \ 
      -I/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/include 


all: test 

test: main.cpp 
    $(CPP) $(CPPFLAGS) $^ -o [email protected] 

これは、コンパイラのエラーです

答えて

1

Makefileが間違っています。 -L & -lのオプションは、リンク時に関連します(ただし、コンパイル時にではなく、)。 this & that回答と例(どちらもあなたの質問とよく似ており、適応できるはずのMakefileを表示してください)を参照してください。 make -pを実行して、それらが使用する組み込みルールと変数を理解してください。

(私はあなたがLinux上である推測しています)

読むよりおよそELFlinkers & dynamic linkersobject filesexecutables、など。レヴァインのLinkers and loaders本を参照してください。

BTW、CV_MAJOR_VERSIONなど...おそらく#include directivesの一部で記載されているヘッダーに定義されているmacroです。しかし、cv::Matはおそらく、コンストラクタやリンク時に参照されるvtableといった、本物のC++クラスです。

おそらく、C++についての良い本も読んでください。 Programming -- Principles and Practice Using C++;しかし、私たちはここでそれをすべて説明する時間と空間がありません。

+0

こんにちは、ご意見ありがとうございます。なぜ私はこのメイクファイルでバージョン番号を得ることができますが、まったく同じメイクファイルでcv :: Matを作ることはできません。 – user1431515

+0

あなたはどの 'Makefile'について話していますか? –

0

メイクファイルはようにする必要があります:

CPP = g++ -std=c++0x 

# OpenCV trunk 
CPPFLAGS = -L/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/lib -lopencv_core -lopencv_highgui -lopencv_imgproc \ 
      -I/home/myname/Desktop/myfolder/rewrite/opencv-2.4.13/release/installed/include 

all: test 

test: main.cpp 
    $(CPP) $(CPPFLAGS) $^ -o [email protected] 

フラグ-lopencv_core -lopencv_highgui -lopencv_imgprocが欠落していました。

別のディレクトリにopencvをインストールすると、アクセスできない共有ライブラリエラーが発生する可能性があります。そのような場合は、こちらの手順に従ってください:openCV program compile error "libopencv_core.so.2.4: cannot open shared object file: No such file or directory" in ubuntu 12.04

関連する問題