Ubuntu下cmakelists打包动态库并移植到另一台无环境Ubuntu

@Ubuntu下cmakelists打包动态库并移植到另一台无环境Ubuntu

Ubuntu下cmakelists打包动态库并移植到另一台无环境Ubuntu

项目需要写一个demo,里边包含了opencv库,ncnn库,json等,需要打包成动态库并且要在另一台电脑进行调用。

cmakelists编写

cmake_minimum_required(VERSION 3.10)
project(Yolov5)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/opencv/include/opencv4)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/opencv/lib)
link_libraries(opencv_core
              opencv_imgproc
              opencv_highgui
              opencv_video
              opencv_videoio)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Json)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/ncnn/include/ncnn)
add_library(libncnn STATIC IMPORTED)
set_target_properties(
        libncnn
        PROPERTIES IMPORTED_LOCATION
        ${CMAKE_CURRENT_SOURCE_DIR}/src/ncnn/lib/libncnn.a
)

FIND_PACKAGE(OpenMP REQUIRED)
if(OPENMP_FOUND)
  message("OPENMP FOUND")
  message(STATUS "OpenMP version: ${OpenMP_VERSION}")
  
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

add_library(Yolov5 SHARED ./detect.cpp ./detect_api.cpp)
#add_executable(Yolov5 main.cpp detect.cpp detect_api.cpp)
target_link_libraries(Yolov5
libncnn)

opencv我是直接放到项目下进行读,这样方便移植。
add_library生成的是动态链接库,add_executable生成的是可执行文件。

移植时依赖库的寻找

新建文件夹(我这里是bin)并创建一个.sh文件,把生成的可执行文件和.sh文件放在一起并执行 bash *.sh(*为你的文件名)这样就可以找到可执行文件的依赖库。

#!/bin/sh  
exe="Yolov5" #发布的程序名称
des="/home/john/john/lib/bin" #创建文件夹的位置
deplist=$(ldd $exe | awk  '{if (match($3,"/")){ printf("%s "),$3 } }')  
cp $deplist $des

在新电脑上运行你的demo

把上述项目生成的.so动态库和找到的依赖库进行打包并移植到新电脑。
创建新工程调用你的动态库。
进行编写cmakelists如下:

cmake_minimum_required(VERSION 3.10)
project(videoRead)

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/libs/include)
link_directories(/${CMAKE_CURRENT_SOURCE_DIR}/src/libs/lib)
link_libraries(Yolov5)

add_executable(videoRead 1.cpp)
target_link_libraries(videoRead)

在src文件下边有两个文件夹,一个为depend,一个为libs。
depend中放入上边bash后的依赖库,libs里include放入动态库需要的头文件,lib放入你生成的动态库。

电脑中需要有pkg_config,然后通过pkg_config进行索引依赖库。

sudo touch /etc/ld.so.conf.d/lib.conf
sudo ldconfig

lib.conf中写入依赖库的路径。例如:/home/john/src/libs/depend
然后进行编译、执行就可以运行了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值