Linux打包opencv和C++可执行程序

在Linux上写好的C++程序,用到了第三方库opencv,现在需要在一个没有装opencv的linux电脑下执行,做个笔记,希望对需要的人有帮助

参考:

http://www.ngui.cc/51cto/show-6859.html

https://blog.csdn.net/qq_28901541/article/details/97310437

1,准备编译好的c++程序以及可执行文件

图一

上面目录是经过如下编译后的结果,

cmake .
make -j4

# ./yolov4是编译好的可执行文件
# 
# yolov4是c++代码
# 
# *.bin和*.param是转后的ncnn模型

2,将编译后ncnn静态库和代码复制到上图目录下

git clone https://github.com/Tencent/ncnn.git #可使用镜像加速github.com.cnpmjs.org和git.sdut.me/
cd ncnn
mkdir -p build
cd build
cmake …
make -j4
make install

编译后ncnn静态库:./ncnn/build/install

2.1,在图一新建ncnn文件夹,如下,

mkdir ncnn
cd ncnn
mkdir include
mkdir lib

2.2,将编译后ncnn静态库和文件移动到2.1新建的相应位置
 

./ncnn/build/install/include/ncnn  -> 2.1中ncnn/include下

./ncnn/build/install/lib  -> 2.1中ncnn/lib/下

3,移动依赖需要的脚本

需要新建两个脚本文件:pack.sh 和 yolov4.sh。(yolov4.sh文件名需要和可执行文件名一致)

pack.sh:主要是为了复制可执行文件untitled5所需要的依赖库。

yolov4.sh:是为了在别的电脑上运行可执行文件yolov4。

pack.sh #此将c++执行需要的opencv依赖库单独copy出来,用于在其他机器上用

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

我执行的出现了问题,把脚本在命令行下分开执行了

yolov4.sh

#!/bin/sh
appname=`basename $0 | sed s,\.sh$,,` # $0是脚本文件名,所以脚本文件一定要和可执行文件名保持一致
dirname=`dirname $0`
tmp="${dirname#?}"
if [ "${dirname%$tmp}" != "/" ]; then
dirname=$PWD/$dirname
fi
LD_LIBRARY_PATH=$dirname
export LD_LIBRARY_PATH
$dirname/$appname "$@"

4,执行脚本

./pack.sh

即可成功运行。

我的最终目录

5,复制到其他机器,编译c++文件

sh yolov4.sh
cmake .
make -j4
./yolov4 #执行正常

我的CMakeLists.txt少了个 project(yolov4) ,添加上就ok了

在win10  Ubuntu子系统下编写pack.sh时候

执行sh pack.sh报错

调查后参考:https://www.cnblogs.com/willingtolove/p/13387424.html

window下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。

使用vim打开xxx.sh

vim xxx.sh

直接输入“:set ff”,不用进编辑模式;
如果输出“fileformat=dos”,说明文本格式是windows下的;
直接输入“:set ff = unix” 即可。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值