簡體   English   中英

使用cmake將OpenCV用作外部的C ++項目

[英]C++ project with OpenCV as external using cmake

我是cmake的新手,幾天后不知道如何實現這一目標。

我正在嘗試使用cmake構建依賴於OpenCV的C ++項目,但是我希望cmake可以像這樣克隆並安裝它。 我找到了一個項目的CMakeFile用作完成此任務的參考。

main.cpp中:

#include <iostream>
#include <opencv2/opencv.hpp>


int main() {
    std::cout << "OpenCV Version: " + cv::getVersionString() << std::endl;
    return 0;
}

的CMakeLists.txt:

cmake_minimum_required(VERSION 3.12)
project(cv_playground)
set(CMAKE_CXX_STANDARD 14)

find_package(Git REQUIRED)

include(ExternalProject)

# OpenCV
set(OPENCV_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/opencv)
ExternalProject_Add(opencv
        GIT_REPOSITORY https://github.com/opencv/opencv
        GIT_TAG 68942affdbc4677aa845bc4307d4752182324a0e # 4.0.0-alpha
        SOURCE_DIR opencv
        BINARY_DIR opencv-build
        CMAKE_ARGS
          -DCMAKE_INSTALL_PREFIX=${OPENCV_INSTALL_LOCATION}
        )
include_directories(${OPENCV_INSTALL_LOCATION}/include/opencv4)
link_directories(${OPENCV_INSTALL_LOCATION}/lib)

add_executable(cv_playground main.cpp)
add_dependencies(cv_playground opencv)
target_link_libraries(cv_playground opencv_core opencv_dnn opencv_features2d opencv_flann opencv_highgui opencv_imgcodecs)

但是在構建項目時,我會得到很多未定義的引用(pthread,gz,dlopen / dlclose,itt_domain_create_ptr等)

我想知道如何修復那些undef引用,我已經安裝了pthread,zlib等,但是我不知道如何制作cmake來使用它們。 我嘗試將它們添加到例如target_link_libraries ,但仍然給我相同的錯誤:

CMakeLists.txt(請注意target_link_libraries中的CMAKE_DL_LIBS):

cmake_minimum_required(VERSION 3.12)
project(cv_playground)
set(CMAKE_CXX_STANDARD 14)
set(THREADS_PREFER_PTHREAD_FLAG ON)

find_package(Threads REQUIRED)
find_package(Git REQUIRED)

include(ExternalProject)

# OpenCV
set(OPENCV_INSTALL_LOCATION ${CMAKE_BINARY_DIR}/opencv)
ExternalProject_Add(opencv
        GIT_REPOSITORY https://github.com/opencv/opencv
        GIT_TAG 68942affdbc4677aa845bc4307d4752182324a0e # 4.0.0-alpha
        SOURCE_DIR opencv
        BINARY_DIR opencv-build
        CMAKE_ARGS
          -DWITH_OPENGL=OFF
          -DCMAKE_INSTALL_PREFIX=${OPENCV_INSTALL_LOCATION}
        )
include_directories(${OPENCV_INSTALL_LOCATION}/include/opencv4)
link_directories(${OPENCV_INSTALL_LOCATION}/lib)

add_executable(cv_playground main.cpp)
add_dependencies(cv_playground opencv)
target_link_libraries(cv_playground Threads::Threads ${CMAKE_DL_LIBS} opencv_core opencv_dnn opencv_features2d opencv_flann opencv_highgui opencv_imgcodecs)

錯誤消息(仍然獲得對dlopen,dlclose等的未定義引用)

[ 90%] Linking CXX executable cv_playground
/home/syonekura/CLionProjects/cv_playground/cmake-build-debug/opencv/lib/libopencv_core.a(system.cpp.o): In function `cv::TLSData<cv::(anonymous namespace)::ThreadID>::createDataInstance() const':
system.cpp:(.text._ZNK2cv7TLSDataINS_12_GLOBAL__N_18ThreadIDEE18createDataInstanceEv+0x37): undefined reference to `__itt_thread_set_name_ptr__3_0'
/home/syonekura/CLionProjects/cv_playground/cmake-build-debug/opencv/lib/libopencv_core.a(opencl_core.cpp.o): In function `GetHandle(char const*)':
opencl_core.cpp:(.text._ZL9GetHandlePKc+0x7): undefined reference to `dlopen'
opencl_core.cpp:(.text._ZL9GetHandlePKc+0x1e): undefined reference to `dlsym'
opencl_core.cpp:(.text._ZL9GetHandlePKc+0x53): undefined reference to `dlclose'
/home/syonekura/CLionProjects/cv_playground/cmake-build-debug/opencv/lib/libopencv_core.a(opencl_core.cpp.o): In function `opencl_check_fn(int)':
opencl_core.cpp:(.text._ZL15opencl_check_fni+0x3f): undefined reference to `dlsym'

所以我本人有很多問題。 Cmake本質上應僅用於構建OpenCV庫。 如果您使用的是ubuntu機器,則要執行以下操作:

# Update and upgrade packages
sudo apt-get -y update
sudo apt-get -y upgrade

# Remove any existing versions of x264
sudo apt-get remove x264 libx264-dev

# Install OS Libraries

# Install Dependencies
sudo apt-get -y install build-essential checkinstall cmake pkg-config yasm gfortran git
sudo apt-get -y install libjpeg8-dev libjasper-dev libpng12-dev
# Used for Ubuntu 16.04
sudo apt-get -y install libtiff5-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt-get -y install libxine2-dev libv4l-dev
sudo apt-get -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt-get -y install libqt4-dev libgtk2.0-dev libtbb-dev
sudo apt-get -y install libatlas-base-dev
sudo apt-get -y install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt-get -y install libvorbis-dev libxvidcore-dev
sudo apt-get -y install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt-get -y install x264 v4l-utils

# Install Optional Dependencies
sudo apt-get -y install libprotobuf-dev protobuf-compiler
sudo apt-get -y install libgoogle-glog-dev libgflags-dev
sudo apt-get -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

# Download OpenCV from Github
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 3.3.0
cd ..

# Download opencv_contrib from Github
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 3.3.0
cd ..

# Compile and Install OpenCV with contrib
# Create build directory inside opencv directory
cd opencv
mkdir build
cd build

# Run CMake with the following options
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D INSTALL_C_EXAMPLES=ON \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D WITH_TBB=ON \
      -D WITH_V4L=ON \
      -D WITH_QT=ON \
      -D WITH_OPENGL=ON \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
      -D BUILD_EXAMPLES=ON ..

# Compile and Install
make -j4
sudo make install
sudo sh -c 'echo "/usr/local/lib" >> /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig

您可以挑選最相關的部分,但實際上這需要使OpenCV庫可用於您的項目。 然后,您可以使用制作文件來制作您的項目,也可以這樣運行命令:

c ++ pkg-config --cflags opencv文件名pkg-config --cflags opencv pkg-config --libs opencv -o文件名

這將創建一個名為filename的可執行文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM