交叉编译(树莓派与ubuntu Linux)

交叉编译是什么

交叉编译是在一个平台上生成另一个平台上的可执行代码
		我们在windows上面编写C51代码,并编译成可执行代码,如xx.hex,
		是在C51上面运行,不是在Windows上面运行
		
		我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,
		是在ubuntu上面运行,不是在ubuntu Linux上面运行

		编译 :是在一个平台上生成在该平台上的可执行代码

		C51交叉编译的发生在keil(集成环境里面)

为什么要交叉编译

平台上不允许或不能够安装我们所需要的编译器,比如C51
1.因为目的平台的资源贫乏,无法运行我们所需要的编译器
2.树莓派是不是就不需要交叉编译?
	错,也需要。
	树莓派有事因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。
	操作系统也是代码,也要编译。

	平台运行需要两样至少的东西:BootLoader(启动引导代码)以及操作系统核心

宿主机(host):编辑和编译程序的平台,一般是基于x86的PC机(程序员用的电脑),通常
				称为主机
目标机(target):用户开发的系统(比如树莓派),通常都是非x86平台。host编译得到的
				可执行代码在target上运行

交叉编译用到的工具

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

交叉编译工具链的安装

https://github.com/raspberrypi/
------>点击tools----->code---->Download ZIP

建立一个新目录:mkdir lessonJX
从共享文件夹拷贝到工作目录(linux): cp /mnt/hgfs/share/tools-master.zip .
 解压:unzip tools-master.zip
 解压完成后执行:cd tools-master/
 		         cd arm-bcm2708 
 		         ls找到gcc-linaro-arm-linux-gnueabihf-raspbian-x64(64位的用这个)
 		         cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64
 		         cd bin/
 		         ls -l 出现一堆绿色的可执行文件
 		         我们用到arm-linux-gnueabihf-gcc这个蓝色的,是一个软链接
 		         软链接是个假的,它实际用到的程序是arm-linux-gnueabihf-gcc-4.8.3
 		      (取了一个文件的名字指向4.8.3)软链接不占内存,只是一个符号指向这个位置
 		      ./arm-linux-gnueabihf-gcc -v-------查看版本

但是一直进这么多的路径运行很麻烦,我们需要配置一下环境变量
	pwd获得路径		echo $PATH 获得当前环境变量的值		export配置环境变量
	
	临时有效,配置环境变量:
	pwd:...............
	echo $PATH:/usr/........./game:............把game后面的替换为pwd获取的路径即可.
	cd 回到主目录
	arm-linux-gnueabihf-gcc -v就可以识别了

	永久有效,配置环境变量
	修改工作目录下的.bashrc 隐藏文件,配置命令终端的:vi /home/CLC/.bashrc
	shift+z跳到最后一行,在文件最后一行加入:上述echo $PATH配置好的环境变量
	生效一下:source /home/CLC/.bashrc 加载配置文件,马上生效配置

交叉编译实现

vi a.c
gcc a.c -o test_1
file test_1------------会看到x86-64的字样,代表只能运行在x86-64位的电脑上面
					   树莓派上跑不了
我们要用交叉编译让树莓派运行这个程序:
交叉编译生成树莓派可执行的代码:arm-linux-gnueabihf-gcc a.c -o text_2
file text_2------------会看到ARM的字样,代表已经生成树莓派可执行代码,可ARM平台运行

拷贝到树莓派/home/pi底下:scp text_2 pi@192.168.43.123:/home/pi
						  指令  文件名  开发板用户名@开发板地址:开发板的绝对路径
						  输入树莓派密码,拷贝成功

带WiringPi如何交叉编译

/*-------------------------不用看-----------------------
在Linux上位机中安装wiringPi库:cp /mnt/hgfs/share/WiringPi . -rf
进入WiringPi :cd WiringPi/
安装./build,安装后在/usr/local/lib中生成

1. 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的
   试试,链接库的格式也是正确的。
2. 通过-I -L来指定
*/-------------------------不用看了-----------------------------

把树莓派上的WiringPi拿来给宿主机用:cd /usr/lib/
查看:ls -l |grep wiringPi
	  出现:libwiringPi.so -> libwiringPi.so.2.50软链接到2.50,我们用2.50
拷贝到Linux;scp libwiringPi.so.2.50 fansp@192......:/home/fsp

创建一个软链接指向它这个库
软链接:
	参考文章: https://www.cnblogs.com/zhangna1998517/p/11347364.html
	概念:
	     1. 软链接文件有类似于Windows的快捷方式。
	     2. 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
	     3. 你选定的位置上生成一个文件的镜像,不会占用磁盘空间
	如何生成:
	ln -s libwiringPi.so.2.50 libwiringPi.so(蓝色的软链接) 
	指令 参数   要被链接的文件    软链接文件名字
	ls-l查看.so会有一个箭头指向.so.2.50
	
硬链接:ln libwiringPi.so.2.50 libwiringPi.so 
			它会在你选定的位置上生成一个和源文件大小相同的文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建 Linux树莓派交叉编译环境,需要完成以下几个步骤: 1. 安装交叉编译工具链 在 Linux 上使用交叉编译工具链来编译适用于树莓派的程序。可以在 Raspberry Pi 官网上下载适用于 Linux交叉编译工具链。 2. 配置环境变量 将交叉编译工具链的路径添加到系统的环境变量中,以便在命令行中使用。 例如,在 Ubuntu 系统中,可以编辑 /etc/environment 文件,添加以下代码: ``` export PATH=$PATH:/path/to/cross-compile-toolchain/bin ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具链路径。 3. 编写交叉编译脚本 编写一个简单的交叉编译脚本,以便能够快速编译适用于树莓派的程序。 例如,在使用 CMake 构建程序时,可以编写一个名为 raspberrypi.cmake 的脚本文件,将以下代码添加到 CMakeLists.txt 文件中: ``` set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_COMPILER /path/to/cross-compile-toolchain/bin/arm-linux-gnueabihf-g++) set(CMAKE_FIND_ROOT_PATH /path/to/cross-compile-toolchain/arm-linux-gnueabihf/sysroot) ``` 将 /path/to/cross-compile-toolchain 替换为实际的交叉编译工具链路径。 4. 编译程序 使用交叉编译工具链编译程序。 例如,在使用 CMake 构建程序时,可以在命令行中运行以下命令: ``` mkdir build cd build cmake .. -DCMAKE_TOOLCHAIN_FILE=raspberrypi.cmake make ``` 这将使用 raspberrypi.cmake 脚本文件来构建程序,并使用交叉编译工具链来编译程序。 完成上述步骤后,就可以在 Linux 上搭建树莓派交叉编译环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值