1,为什么要交叉编译,交叉编译是什么

交叉编译 是在一个平台上生成另一个平台上的可执行代码。
我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,是在c51上面运行,不是在windows上面运行
我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行
编译:是在一个平台上生成在该平台上的可执行代码
C51 交叉编译的发生在keil(集成环境上面)
stm32

mac ios 交叉编译器 交叉编译器怎么用_mac ios 交叉编译器

2,交叉编译需要用到什么

交叉编译器、交叉编译工具链

3,安装交叉编译工具链

a,下载好目标机的的交叉编译工具链
b,新建一个文件夹放下下好的交叉工具安装包,使用命令

unzip tools-master.zip //解压
cd /home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin//进入当前文件夹

找到我们要用的交叉编译链。
c,配置环境变量。
用echo $PATH 查看当前环境变量。
在用命令

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

其中/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:这个不变;后面的那一坨为交叉编译链的所在地方。
这种方法只是临时有效。
d,永久有效的方法:
使用命令cd回到工作目录在使用命令vi .bashrc在最下面加入export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin//交叉编译链的路径
在使用命令source .bashrc加载配置文件生效
e,检查交叉编译是否完成
使用该交叉编译链编译文件。
在使用命令 file 执行文件 查看文件属性。
4,带有wiringPi库的交叉编译
a,正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。
b, 通过-I -L来指定

arm-linux-gnueabihf-gcc demo.c -I /home/lx/Desktop/WiringPi/WiringPi/wiringPi -L. -lwiringPi -o hao

arm-linux-gnueabihf-gcc:交叉编译工具链
demo.c:待编译文件
/home/lx/Desktop/WiringPi/WiringPi/wiringPi:头文件在哪里去找(指定到文件目录)
-lwiringPi:告诉编译器去当前路径去查找去找静态库,默认是去lib中寻找。
-I (大写i):如-I 头文件地址(指定到文件夹),./表示在本目录下,后面的路径存放着头文件的地址,第一个寻找头文件的目录。

-L:如 -L ./库文件地址(指定到该库文件名),后面的路径存放着库文件的地址,第一个寻找库文件的目录。'.'代表当前目录。静态库指定文件名,动态库指定文件夹在加上小l指定动态库,动态库路径加入到LD_LIBRARY_PATH环境变量。头文件环境变量C_INCLUDE_PATH,找C++头文件环境变量CPLUS_INCLUDE_PATH,找静态库环境变量LIBRARY_PATH,python的包环境变量 PYTHONPATH

-l (小写L):-l后面跟着的是动态库的名字,会寻找.so动态库文件。

5,生成软连接和硬链接

会用到命令ln

mac ios 交叉编译器 交叉编译器怎么用_mac ios 交叉编译器_02