@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
然后进行编译、执行就可以运行了!