ubuntu下使用cmake打包算法动态链接库so 设置软链接

把自己的算法打包发给别人,部署上线,移植时需要把代码打包成动态链接库或可执行文件。如何打包呢?

话不多说,上例子。

先验证自己的算法和代码是OK的。

编辑test.cpp:

int main( int argc, char** argv) {
    Mat src = imread(argv[1]);
    chrono::steady_clock::time_point t1 = chrono::steady_clock::now();

    int Result = ImgCheck(argv[1]);
    cout<<"Result: "<<Result<<endl;

    chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
    chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>( t2-t1 );
    cout<<"算法用时:"<<time_used.count()*1000<<" ms。"<<endl;

    return 0;
}

编辑CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(Test)

set( CMAKE_BUILD_TYPE "Release" )
set(CMAKE_CXX_FLAGS "-std=c++11 -O3")

# 寻找OpenCV库
find_package( OpenCV 3 REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_library(ImgCheck SHARED ./ImgCheck.cpp)
link_libraries(ImgCheck)
add_executable(Test test.cpp ${ImgCheck})
target_link_libraries( ImgCheck ${OpenCV_LIBS} )

进行代码编译:

mkdir build

cd build 

cmake ..

make

成功后进行测试:

./Test test.jpg

验证OK后开始打包,重新编辑CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
project(ImgCheck)

set( CMAKE_BUILD_TYPE "Release" )
set(CMAKE_CXX_FLAGS "-std=c++11 -O3")

# 寻找OpenCV库
find_package( OpenCV 3 REQUIRED )
# 添加头文件
include_directories( ${OpenCV_INCLUDE_DIRS} )

add_library(ImgCheck SHARED ./ImgCheck.cpp)
#link_libraries(ImgCheck)
#add_executable(Test test.cpp ${ImgCheck})
target_link_libraries( ImgCheck ${OpenCV_LIBS} )

进行代码编译:

mkdir build

cd build 

cmake ..

make

成功后生成了算法动态库libImgCheck.so,将此so和对应ImgCheck.h或README.md发给别人即可。

如果别人没有装OpenCV或其它依赖库怎么办呢?

不要慌,把依赖库一并拷过去即可,这样操作:

首先,查看此算法动态链接库so需要哪些依赖库:

objdump -x libImgCheck.so | grep NEEDED

拷贝第一个依赖库,后三个不需要了:

find -name libopencv_world.so.3.4

cp 路径 本路径

如果移植的环境不同怎么办?别人是ubuntu16.04,你是ubuntu18.04

把后面的几个依赖库都拷贝了,除了libc.so.6,这个一定要慎重拷贝,一般不拷贝。

拷到对方的环境下就OK了吗?NO NO,还要设置软链接哦。

软链接这样设置:

vi ~/.bashrc

export LD_LIBRARY_PATH=/home/imgcheck

source ~/.bashrc

最后唠叨一句,最好要开发环境和部署环境要保持一致,这是合格程序员的自我修养。不然移植中很容易出莫名其妙的问题。

 


版权声明:本文为h_372101原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。