如何在Linux上进行OpenCV的静态编译?

在Linux上静态编译OpenCV的详细步骤

1. 准备工作

如何在Linux上进行OpenCV的静态编译?插图1
(图片来源网络,侵删)

确保你的系统已经安装了必要的工具和依赖项,可以使用以下命令进行安装:

sudo apt-get update
sudo apt-get install build-essential cmake git

2. 获取OpenCV源码

从GitHub上克隆OpenCV的源代码:

git clone https://github.com/opencv/opencv.git
cd opencv

3. 创建构建目录并配置CMake

在OpenCV源码根目录下创建一个用于构建的目录,并进入该目录:

如何在Linux上进行OpenCV的静态编译?插图3
(图片来源网络,侵删)
mkdir build && cd build

使用CMake生成Makefile文件时,需要设置一些参数以编译静态库,以下是关键参数的解释:

-DBUILD_SHARED_LIBS=OFF: 禁用共享库,只编译静态库。

-DBUILD_opencv_world=ON: 将所有静态库集中到一个名为opencv_world的静态库中。

-DWITH_*=OFF: 根据需求关闭不需要的功能模块。

完整的CMake配置命令如下:

如何在Linux上进行OpenCV的静态编译?插图5
(图片来源网络,侵删)
cmake ../ -DCMAKE_BUILD_TYPE=RELEASE 
    -DBUILD_SHARED_LIBS=OFF 
    -DBUILD_opencv_python2=OFF 
    -DBUILD_opencv_python3=OFF 
    -DBUILD_opencv_java=OFF 
    -DBUILD_opencv_world=ON 
    -DBUILD_JAVA=OFF 
    -DBUILD_ANDROID_EXAMPLES=OFF 
    -DWITH_OPENCL=OFF 
    -DWITH_IPP=OFF 
    -DWITH_TBB=OFF 
    -DBUILD_EXAMPLES=OFF 
    -DBUILD_TESTS=OFF 
    -DBUILD_PERF_TESTS=OFF 
    -DBUILD_DOCS=OFF

4. 编译和安装

执行以下命令进行编译:

make -j8  # 这里的数字8表示使用8个CPU核心进行并行编译,可以根据实际情况调整

编译完成后,可以选择安装OpenCV:

sudo make install

5. 验证和使用静态库

为了验证静态库是否正常工作,可以创建一个简单的测试项目,以下是一个简单的CMakeLists.txt示例:

cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)
message("Project root path is ${CMAKE_CURRENT_SOURCE_DIR}")
set(CMAKE_CXX_FLAGS "-pthread")
set(ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(OPENCV_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libs/linux/x86-64")
macro(OPENCV_IMPORT_LIBS LibsList LibName LibPaths)
    message(STATUS "Importing libs ${LibName}!")
    add_library(${LibName} STATIC IMPORTED GLOBAL)
    set_target_properties(${LibName} PROPERTIES IMPORTED_LOCATION ${LibPaths})
    list(APPEND ${LibsList} ${LibName})
endmacro()
include_directories(${ROOT_PATH}/include)
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_world "${OPENCV_LIB_PATH}/libopencv_world.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_llmlmf "${OPENCV_LIB_PATH}/libIlmImf.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjpeg "${OPENCV_LIB_PATH}/liblibjpeg-turbo.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libpng "${OPENCV_LIB_PATH}/liblibpng.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libtiff "${OPENCV_LIB_PATH}/liblibtiff.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjasper "${OPENCV_LIB_PATH}/liblibjasper.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libnotify "${OPENCV_LIB_PATH}/libittnotify.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libwebp "${OPENCV_LIB_PATH}/liblibwebp.a")
add_executable(OpenCVTest test.cpp)
target_link_libraries(OpenCVTest ${OPENCV_LIBS} -lz -ldl)

然后编写一个简单的测试程序test.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
int main() {
    cv::Mat image = cv::imread("your_dir/IMG_1811.JPG", cv::IMREAD_COLOR);
    if (image.empty()) {
        cerr << "Failed to read image" << endl;
        return -1;
    }
    return 0;
}

编译并运行测试程序:

mkdir build && cd build
cmake ..
make
./OpenCVTest

如果程序能够正确读取并显示图像,则说明OpenCV静态库配置成功。

小伙伴们,上文介绍linux静态编译opencv的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/83240.html

(0)
上一篇 2024年10月23日 14:56
下一篇 2024年10月23日 15:07

相关推荐