实现交叉编译需要交叉编译工具链
基本概念
交叉编译就是在一个平台上生成另一个平台上的可执行二进制。这两个平台可以是不同的体系结构和不同的操作系统。例如,在嵌入式系统C/C++开发过程中,常常需要在x86/x86_64主机上编译出可执行程序,给arm或powerpc体系结构的设备运行。
交叉编译的两个概念:
宿主机(host):编译程序的平台,一般是基于x86的PC机,通常也称为主机。
目标机(target):用户开发软件所运行的设备,通常都是非x86平台。host编译生成的可执行程序在target上运行。
交叉编译工具链是一个由编译器、链接器和解释器组成的综合开发环境,主要由binutils、gcc和glibc三个部分组成,安装在宿主机host上。其中,binutils主要生成一些辅助工具;gcc是用来生成交叉编译器,而glibc主要提供用户程序所依赖的一些基本函数库。
https://blog.csdn.net/dingxiu8587/article/details/102160984
https://www.cnblogs.com/Charles-Zhang-Blog/archive/2013/02/21/2920999.html
https://blog.csdn.net/qq_34818535/article/details/81349524
我们之前的问题:如何实现将memcpy这个函数指向glibc2.2.5
尝试过程中碰到的问题是libc和gcc有一个循环依赖的问题,所以需要将gcc分两次编译,第一次不依赖libc才行,第二次才依赖。否则就会出现无法指定低版本libc链接的问题,如果指定连gcc都无法执行
链接库的路径链接:
https://www.cnblogs.com/yangxunwu1992/p/6294350.html
gcc怎么寻找头文件
https://blog.csdn.net/zlj7777/article/details/6672720
elf文件的格式需要理解
环境变量调用流程
https://www.linuxprobe.com/environment-variable-configuration.html
linux的启动逻辑