交叉编译安装TOF基于RV1126的应用

交叉编译应用参考文章:https://blog.csdn.net/whahu1989/article/details/104114515
动态库参考文章: https://www.cnblogs.com/szullc/p/6012305.html

将基于arm32的samples工程放入Ubuntu中,
现在希望最终编译的程序是运行在arm linux系统上的,这就需要交叉编译。

cd samples/c
touch arm_linux_setup.cmake #新建一个arm_linux_setup.cmake交叉编译链文件
vim arm_linux_setup.cmake

在arm_linux_setup.cmake填入

set(CMAKE_SYSTEM_NAME Linux)#CMAKE_SYSTEM_NAME:即目标系统名,这里是Linux
set(CMAKE_SYSTEM_PROCESSOR arm)#CMAKE_SYSTEM_PROCESSOR :目标系统的处理器名,这里是arm

set(tools /home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf)#这是交叉编译工具链的路径 根据实际修改
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)#CMAKE_C_COMPILER:C编译器的可执行文件名称
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)#CMAKE_CXX_COMPILER:C++编译器的可执行文件名称

然后创建一个build文件夹

mkdir build

结构如下
在这里插入图片描述

进入build文件夹,进行编译,需要指定刚刚创建的交叉编译链文件

# 注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 .. 后面
cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
root@ubuntu:/home/zkhx/Pictures/armv7l_linux/samples/c/build# cmake -DCMAKE_TOOLCHAIN_FILE=../arm_linux_setup.cmake ..
-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
-- Check for working C compiler: /home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
-- Check for working CXX compiler: /home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found DMCAM: /home/zkhx/Pictures/armv7l_linux/lib/linux32/libdmcam.so  
-- DMCAM inc: /home/zkhx/Pictures/armv7l_linux/include
-- DMCAM lib: /home/zkhx/Pictures/armv7l_linux/lib/linux32/libdmcam.so
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- sample_filter
-- sample_set_param
-- sample_save_replay
-- sample_capture_frames
-- Configuring done
-- Generating done
-- Build files have been written to: /home/zkhx/Pictures/armv7l_linux/samples/c/build

camke成功,然后进行make
编译需要配置交叉工具链

export PATH=$PATH:/home/zkhx/Downloads/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

然后make成功。生产可执行文件拷贝到开发板。
在这里插入图片描述

[root@RV1126_RV1109:/userdata]# ./sample_capture_frames
-/bin/sh: ./sample_capture_frames: Permission denied

报错Permission denied,应该是文件权限有问题
执行chmod修改权限,发现找不到动态库

[root@RV1126_RV1109:/userdata]# chmod 777 sample_capture_frames
[root@RV1126_RV1109:/userdata]# ./sample_capture_frames
./sample_capture_frames: error while loading shared libraries: libdmcam.so: cannot open shared object file: No such file or directory

没有找到程序所需的libdmcam.so动态库。大家都知道,动态库与静态库的最大区别就是:静态库是静态链接,也就是在生产可执行文件的时候就把静态库中的实现嵌入到程序中了,一旦编译成功了,静态库也就有存在的价值了,即便静态库不存在了,可执行程序也是可以跑起来的;但是动态库就不一样了,它是遵循动态链接,也是就说编译的时候需要指定路径去找该so文件链接编译,运行的时候也需要指定相应的路径去找。如果在运行的时候,可执行程序会先去默认的系统lib目录下,寻找该so,如果找不到了,就该报错了:error while loading shared libraries。(可以通过该文章,了解下动态库的动态加载机制 http://blog.csdn.net/dbzhang800/article/details/6918413)
  上面这一段话,讲可执行程序运行时去找so文件,讲得比较笼统,以下总结以下:
  动态库的搜索路径搜索的先后顺序是:
  1.编译目标代码时指定的动态库搜索路径;
  2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;
  3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;
  4.默认的动态库搜索路径/lib /usr/lib。
因此我把所需的libdmcam.so动态库添加到lib文件夹下,解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值