以下shell命令都是在root权限下执行的。得按照顺序来,不然会报找不到包或者一些文件找不到这些话,交叉编译玩多了,自己翻来覆去,整多了后其实也就融会贯通了,有耐心就行。宗旨就是你得让它们找到的到对应文件。一般要么在环境变量里去pkg-config的库文件路径,要么就是在configure时指定下CPPFLAGS、LDFLAGS路径。要么提前aptitude install一些库。
由于博主是在做一个体系 的介绍,如果想要知道前情(一些配置环境)可以自行去主页查找之前的博客。下面的博客含有了树莓派交叉工具链的配置以及一些使用。
Ubuntu20.04下交叉编译树莓派能运行的c++程序(不含第三方库)_jiugeshao的专栏-CSDN博客
Ubuntu交叉编译含有Opencv功能的程序并在树莓派上执行_jiugeshao的专栏-CSDN博客
此外要说明的是,这篇博客写完,接下来的一篇博客就会用此编译出来的OpenGL再去关联交叉编译QT。
1. 下aptitude下面的一个包
aptitude install xutils-dev
2. 下载xproto-7.0.23源码,博主解压缩到了Home目录下,并新建了一个build和install文件夹
进入到build目录下后,执行如下命令交叉编译
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/xproto-7.0.23/install --host=arm-linux
完毕后再继续执行命令
make
make install
可以看到install文件夹下就出现了编译好后的文件(接下来的libxua交叉编译时需要依赖如下的文件)
3. 下载libXau-1.0.7源码,博主解压缩到Home目录下,同样并新建了一个build和install的文件夹
cd到build目录下后,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/libXau-1.0.7/install --host=arm-linux CPPFLAGS="-I/home/sxhlvye/xproto-7.0.23/install/include" LDFLAGS="-L/home/sxhlvye/xproto-7.0.23/install/lib"
再分别执行make和make install指令,成功后可以看到install目录下有了编译好后的文件(接下来的交叉编译libxcb需要依赖其)
4. 下载libpciaccess-0.16源码,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目录下 ,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/libpciaccess-0.16/install --host=arm-linux
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译libdrm-2.4.100时需要依赖它们)
5. 下载源码libdrm-2.4.100,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目录下 ,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/libdrm-2.4.100/install --host=arm-linux --disable-cairo-tests --enable-intel CPPFLAGS="-I/home/sxhlvye/libpciaccess-0.16/install/include" LDFLAGS="-L/home/sxhlvye/libpciaccess-0.16/install/lib"
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
6. 下载源码xcb-proto-1.6源码,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目录下 ,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/xcb-proto-1.6/install --host=arm-linux
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
这边需要注意,在~/.bashrc里需要将 上面两个包的pc文件添加到PKG-CONFIG路径中,完毕后记得输入source ~/.bashrc来生效下。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/sxhlvye/libdrm-2.4.100/install/lib/pkgconfig
export PKG_CONFIG_PATH
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/sxhlvye/xcb-proto-1.6/install/lib/pkgconfig
export PKG_CONFIG_PATH
7. 下载libxcb-1.5源码博主依然解压缩到home目录下,也新建了build和install文件夹
cd到build目录下 ,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/libxcb-1.5/install --host=arm-linux CPPFLAGS="-I/home/sxhlvye/libXau-1.0.7/install/include -I/home/sxhlvye/xproto-7.0.23/install/include" LDFLAGS="-L/home/sxhlvye/libXau-1.0.7/install/lib -L/home/sxhlvye/xproto-7.0.23/install/lib"
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
8. 下载libxshmfence-1.3源码,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目下后,执行如下命令,命令中用到了前面(2)中的文件
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/libxshmfence-1.3/install --host=arm-linux CPPFLAGS="-I/home/sxhlvye/xproto-7.0.23/install/include" LDFLAGS="-L/home/sxhlvye/xproto-7.0.23/install/lib"
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
9. 下载expat-2.2.7源码,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目下后,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/expat-2.2.7//install --host=arm-linux
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
10. 下载openssl-OpenSSL_1_1_1-stable源码包,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目下后,执行如下命令(注意这条命令格式和其它不太一样
../config no-asm --prefix=/home/sxhlvye/openssl-OpenSSL_1_1_1-stable/install --cross-compile-prefix=arm-linux-gnueabihf-
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
11. 下载eudev-3.2.5源码,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目下后,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/eudev-3.2.5/install --host=arm-linux --disable-selinux --disable-blkid
完毕后再执行make和make install,可以看到成功获得所需要的的文件(后面交叉编译mesa-12.0.5时需要依赖它们)
至此对于博主的环境,已经准备好交叉编译mesa-12.0.5所需要的第三方库,毕竟每个人电脑配置不一样,一些其它问题,还需要自己发挥聪明才智去解决,注意躲用configure所带的help命令。
12. 下载mesa-12.0.5,博主依然解压缩到home目录下,并新建了build和install文件夹
cd到build目下后,执行如下命令
CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ ../configure --prefix=/home/sxhlvye/mesa-12.0.5/install --host=arm-linux --disable-cairo-tests --disable-dri3 --disable-glx --disable-egl --enable-intel CPPFLAGS="-I/home/sxhlvye/libpciaccess-0.16/install/include -I/home/sxhlvye/eudev-3.2.5/install/include -I/home/sxhlvye/expat-2.2.7/install/include -I/home/sxhlvye/libxshmfence-1.3/install/include -I/home/sxhlvye/xproto-7.0.23/install/include -I/home/sxhlvye/libxcb-1.5/install/include -I/home/sxhlvye/openssl-OpenSSL_1_1_1-stable/install/include" LDFLAGS="-L/home/sxhlvye/libpciaccess-0.16/install/lib -L/home/sxhlvye/eudev-3.2.5/install/lib -L/home/sxhlvye/expat-2.2.7/install/lib -L/home/sxhlvye/libxshmfence-1.3/install/lib -L/home/sxhlvye/xproto-7.0.23/install/lib -L/home/sxhlvye/libxcb-1.5/install/lib -L/home/sxhlvye/openssl-OpenSSL_1_1_1-stable/install/lib"
make过程中出现的如下报错信息:
/usr/bin/env: ‘python’: No such file or directory
make[1]: *** [Makefile:1160: git_sha1.h] Error 127
make[1]: Leaving directory '/home/sxhlvye/mesa-18.1.0-rc1/build/src'
make: *** [Makefile:676: all-recursive] Error 1
博主已经有了python3环境,版本如下:
Can't find Python when building Qt from sources - Stack Overflow
可参照上面的解决方案,执行下面的命令(博主python3软链接的版本就是3.8),所以直接执行了如下了命令。
sudo cp /usr/bin/python3 /usr/bin/python
再次执行make和make install,成功。