目录
得到RK交叉编译器
主要用到这两个,一个gcc的,一个g++的。
这个交叉编译器请自行下载
将交叉编译器添加进path
在 /usr/local 路径下随便创建个 arm 文件夹,然后把整个交叉编译器的文件夹全扔进去
编辑 /etc/bash.bashrc
vi /etc/bash.bashrc
在末尾加上
export PATH=$PATH:/usr/local/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
export PATH
最后使用这个命令激活一下(不知道能不能称为激活)
source /etc/bash.bashrc
用gcc的交叉编译器试一下,获得下图一样的输出,则没有问题
对MNN进行交叉编译
进入MNN根目录,关于交叉编译的文件在这个路径下
首先回去看一下我们的交叉编译器的名字,叫arm-linux-gnueabihf-gcc、arm-linux-gnueabihf-g++。记住我们用的是arm框架的gnueabihf。
打开上述交叉编译路径下的build.sh文件。在namlelist中找到gnueabihf,在下面的代码中找到对应的部分,后面如果嫌交叉编译慢的话可以像下图中第35行一样,将make改为make j8,相当于使用8个线程(好像是)。
打开上述交叉编译路径下的arm.toolchain.cmake文件,找到对应的arm-gnueabihf,将下面的 CMAKE_C_COMPILER 和 CMAKE_CXX_COMPILER 对应的编译器名字改为本文一开始截图中的那两个。
回到MNN根目录,使用下面的指令对MNN进行交叉编译
./project/cross-compile/build.sh
编译完成后MNN根目录下会出现build-arm-gnueabihf文件夹,我们只需要使用里面的 libMNN.so 和 express/libMNN_Express.so 两个动态库文件。
对自己的工程进行交叉编译
回到自己工程中的CMakeLists.txt,重新指定gcc和g++编译器,并且重新指定.so动态库的路径。
# set(CMAKE_C_COMPILER gcc)
# set(CMAKE_CXX_COMPILER g++)
# 指定RK交叉编译
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
# 指定动态库文件
target_link_libraries(segment ${MNN_DIR}/build-arm-gnueabihf/libMNN.so ${MNN_DIR}/build-arm-gnueabihf/express/libMNN_Express.so)
进入自己工程的build文件夹,重新编译工程
cmake ..
make
将编译好的可执行文件和.so动态库放入板子中运行
在板子中,将刚才编译出来的可执行文件和代码中用到的其他文件(音频文件、模型文件等)按照对应路径进行放置,然后把需要用到的.so动态库放入与可执行文件相同的路径下,运行可执行文件即可。亲测有效。
忘了截图保留运行结果,昨晚把板子还给同事了,这部分就不贴图了。
标签:RK1126,gnueabihf,交叉,编译成,编译,编译器,MNN,KAWAKO,arm From: https://www.cnblogs.com/KAWAKO/p/17072660.html