前言
最近做嵌入式软开相关的项目,使用到了rk3568的芯片,在开发工作进行前首先需要在Ubuntu上配置交叉编译环境,中途也踩了不少坑,记录下来供大家学习探讨,如有错误,感谢指出。
编译工具链的下载
首先需要从商家那里获取厂家的编译工具链,C/C++的程序需要经过 gcc 等编译成二进制程序才能被计算机使用,这里的 gcc 通常是泛指,包括 gcc 、 g++ 、ar 、as 、ld 等一系列工具,这些工具用在程序文件的预编译、编译、链接等整个过程中,这整一套工具就被称为 编译工具链(Toolchain)。
官网上下载地址是rk系列编译工具链下载。
我是将工具链下载到Unbuntu系统中的opt目录中(/opt 目录用来安装附加软件包,是用户级的程序目录,可以理解为 D:/Software)也有不少人直接是将安装包放在/usr/local目录下(用户级的程序目录,可以理解为 C:/Progrem Files/,用户自己编译的软件默认会安装到这个目录下)。
在安装目录解压下载的编译工具链
tar -xvf 下载的文件名
接着要在你的etc/profile目录中去添加环境变量(/etc/profile文件为系统的每个用户设置环境变量信息,此文件的修改会影响到所有用户。)
vi profile
//进入vim编辑器后再最后加入下载的路径,配置环境变量
export PATH=$PATH:/opt/解压文件名/bin/
tips:更改profile需要权限,保存的时候可以执行这个强制保存命令
w !sudo tee %
这里的tee是管道分支,%是指当前文件的路径寄存器
设置完成之后就可以正常编译文件了,但是我在实际运行中还是有报错,我是报了如下错误:
error while loading shared libraries: libXXXXXXX.so.1: cannot open shared object file: No such file or directory
这是编译器从我环境中设置的路径中找不到libXXXXXXX.so.1从而报错。在这里我使用的是virtualbox下的虚拟机报了这个错误,但是使用VMare虚拟机就能够正常编译了,未找到具体原因是什么,猜测是VMware功能更为强大,会自动补全搜索的路径,因为我这个文件确实是成功下载了,只是编译器未能找到,欢迎大佬在评论区补充。
这里继续问题的处理,查阅了网上很多处理方法,主要有以下几种,这里做一个总结:
首先在你的文件系统中找到这个库,可以在rk3568/host/bin/lib目录下执行
find . -name libXXXXXXX.so.1
如果找不到就重新下载安装包,可能安装解压时产生了问题。
1、如果你的文件安装在了/usr/local/lib,那么将该目录加入到共享库的配置文件中
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
//以下为临时解决方案
export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH
2、直接进入etc/profile中修改配置文件
export LD_LIBRARY_PATH=/这个文件存放的绝对路径/libxxxxx.so.1/lib:$LD_LIBRARY_PATH、
3、编译时找不到这个库,就将这个库软链接到usr/local/lib文件下,再添加路径,这样编译器一定就可以找到,具体如下操作,先将这个库软链接到usr/local/lib
sudo ln -s /这个文件的绝对路径/libxxxxxx.so.1 /usr/local/lib
//再进入etc/profile中更改路径
export LD_LIBRARY_PATH="/usr/local/lib"
//保存后退出执行
sudo ldconfig
进入usr/local/lib文件下查看libXXXXXXX.so.1是否连接过来,如果正常链接过来之后就可以正常编译。