2017-12-07 4 views
-1

私はopencvでCmakeを使ってC++でプロジェクトをビルドしようとしています。しかし、私が解決できなかったエラーがあります。私はたくさんの検索をしましたが、何も見つかりませんでした。CMake - OpenCV - -DisplayImageが見つからない

注:
私はOpenCVに初心者です。だから私はこのライブラリがなぜ必要なのか分からない。ウェブサイトで同じことをするだけです。

エラーは/usr/bin/ld: cannot find -lDisplayImageです。

マイcode

#include <opencv2/opencv.hpp> 

using namespace cv; 

int main() 
{ 
    // read image 
    Mat img = imread("foo.jpg", CV_LOAD_IMAGE_UNCHANGED); 

    // show it in the window 
    imshow("Window Name",img); 

    waitKey(); 
} 

マイCMakeLists.txt

cmake_minimum_required(VERSION 3.8) 
project(image_processing) 

find_package(OpenCV REQUIRED) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(image_processing ${SOURCE_FILES}) 
target_link_libraries(image_processing DisplayImage ${OpenCV_LIBS}) 

マイコンパイル出力:

[ 50%] Linking CXX executable image_processing 
/usr/bin/ld: cannot find -lDisplayImage 
collect2: error: ld returned 1 exit status 
CMakeFiles/image_processing.dir/build.make:137: recipe for target 'image_processing' failed 
make[3]: *** [image_processing] Error 1 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/image_processing.dir/all' failed 
make[2]: *** [CMakeFiles/image_processing.dir/all] Error 2 
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/image_processing.dir/rule' failed 
make[1]: *** [CMakeFiles/image_processing.dir/rule] Error 2 
Makefile:118: recipe for target 'image_processing' failed 
make: *** [image_processing] Error 2 

ld -ldisplayimage --verboseコマンドの出力:

attempt to open //usr/local/lib/x86_64-linux-gnu/libdisplayimage.so failed 
attempt to open //usr/local/lib/x86_64-linux-gnu/libdisplayimage.a failed 
attempt to open //lib/x86_64-linux-gnu/libdisplayimage.so failed 
attempt to open //lib/x86_64-linux-gnu/libdisplayimage.a failed 
attempt to open //usr/lib/x86_64-linux-gnu/libdisplayimage.so failed 
attempt to open //usr/lib/x86_64-linux-gnu/libdisplayimage.a failed 
attempt to open //usr/local/lib64/libdisplayimage.so failed 
attempt to open //usr/local/lib64/libdisplayimage.a failed 
attempt to open //lib64/libdisplayimage.so failed 
attempt to open //lib64/libdisplayimage.a failed 
attempt to open //usr/lib64/libdisplayimage.so failed 
attempt to open //usr/lib64/libdisplayimage.a failed 
attempt to open //usr/local/lib/libdisplayimage.so failed 
attempt to open //usr/local/lib/libdisplayimage.a failed 
attempt to open //lib/libdisplayimage.so failed 
attempt to open //lib/libdisplayimage.a failed 
attempt to open //usr/lib/libdisplayimage.so failed 
attempt to open //usr/lib/libdisplayimage.a failed 
attempt to open //usr/x86_64-linux-gnu/lib64/libdisplayimage.so failed 
attempt to open //usr/x86_64-linux-gnu/lib64/libdisplayimage.a failed 
attempt to open //usr/x86_64-linux-gnu/lib/libdisplayimage.so failed 
attempt to open //usr/x86_64-linux-gnu/lib/libdisplayimage.a failed 
ld: cannot find -ldisplayimage 

私はそのライブラリを見つけようとしましたが、見つけられませんでした。私は自分のlibフォルダのすべてをチェックしました。

私のopencvは/opt/opencv/にインストールされ、/opt/opencv/release/で構築されています。

ありがとうございました。私はそれを解決する方法について何も知らない。

+0

あなたがうまくリンクしようとしていない 'DisplayImage'ライブラリとは何ですか?また、OpenCVとは何が関係していますか? –

+0

私のコードを追加しました。 – Zaphiel

+0

あなたはまだ上記に答えていない、と私はまだOpenCVに関連するエラーは表示されません。あなたは説明していない、リンカが見つけることができず、明らかにあなたのコードでも使われていない、あいまいではないライブラリにリンクしようとしています。 –

答えて

1

例をよく理解せずにコピーして貼り付けた場合に発生します。問題は、私はここに行ずつ移動しますあなたは

cmake_minimum_required(VERSION 3.8) 
project(image_processing) 

find_package(OpenCV REQUIRED) 

set(CMAKE_CXX_STANDARD 11) 

set(SOURCE_FILES main.cpp) 
add_executable(image_processing ${SOURCE_FILES}) 
target_link_libraries(image_processing DisplayImage ${OpenCV_LIBS}) 

を持ってCMakeLists.txt

です。最初に、cmakeの最小バージョン(後でいくつかの関数が有効であることを確認する)を確認してから、プロジェクト名を明示的に指定します。次に、OpenCVライブラリを見つけ、いくつかの変数(include、libsなど)を設定します。次に、C++ 11標準とソースファイルを設定します。この場合、この実行可能ファイルは1つだけです(必要なだけ多くのファイルを置くことができます。

最後に重要な部分、あなたは2つの引数を渡すadd_executableは、実行ファイルの名前が(それは何でもすることができます)と、ソースファイルが...あなたも、最初の変数にそれらを設定するのではなく、手動ソースファイルを書き込むことができます。その後、どのライブラリがあなたの実行ファイルにリンクされるのかを言う...ここにあなたはエラーがある!最初に宣言した実行可能ファイルの名前と、使用されているライブラリが続く最初の引数を指定する必要があります。 find_package(OpenCV REQUIRED)を実行したとき、ライブラリ名は$(OpenCV_LIBS)に設定されました。別のライブラリが必要な場合は、手動で名前を付けることができ、コンパイル中にリンクされます。この場合、あなたはDisplayImageという名前を持っていて、それはライブラリ名だと思ってそれをリンクしようとします。これはコンパイル中に-lDisplayImageを意味します。

これは、あなたがこれを削除し、それをコンパイルする必要があることを意味:)

target_link_libraries(image_processing ${OpenCV_LIBS}) 

また、OpenCVのパッケージを見つけた後、私はこれがインクルードフォルダが含まれることを確認します

include_directories(${OpenCV_INCLUDE_DIRS}) 

を行うには、あなたをお勧めしますコンパイルに追加されます。 gccの-Ifolder/pathオプションに相当します。別のライブラリプロジェクトのフォルダをさらに含める必要がある場合は、このコマンドを使用できます。

私はこれがあなたを助けてくれることを願っています。

+0

ああ..すばらしいコメントをありがとう。 – Zaphiel

+0

@ Zaphiel私はいつも説明をしないで解決策を与えることは将来同じミスにつながると思っていますが、問題が理解できれば再び起こることはありません:) – api55

関連する問題