带wiringPi库的交叉编译如何进行

直接下载wiringpi库到Ubuntu Linux上进行安装使用会出错:

正常情况下,我们先要交叉编译wiringPi库,编译出的库要能适合树莓派,然后去交叉编译生成可执行程序的时候,链接库的格式才是正确的。

但是因为我生成的wiringPi的链接库的格式不对,他是宿主机(X86)的平台,导致采用交叉编译的时候树莓派识别不出来这个库,出现以下错误

xiexiong@ubuntu:~/lessonPI$ arm-linux-gnueabihf-gcc demo2.c -I/home/xiexiong/lessonPI/WiringPi/wiringPi  -lwiringPi -odemo2

/home/xiexiong/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
collect2: error: ld returned 1 exit status

解决方法:把树莓派中的wringPI库拿上来用:

即直接将树莓派的wiringPi通过scp指令拷贝到Ubuntu Linux中使用,但是要注意拷贝的是源文件而不是软链接的目标文件;即在树莓派在输入:

scp libwiringPi.so.2.50 xiexiong@192.168.43.37:/home/xiexiong/lessonPI

但是我们在Ubuntu Linux中也希望给源文件也有它自己的目标文件,我们要自己去进行软链接给他生成一个目标文件:

Linux创建连接命令 ln -s创建软连接

ln -s 是linux中一个非常重要命令,一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,

具体用法是:ln -s 源文件 目标文件。

  当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的 目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

例如:ln -s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。

这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接 和硬链接
两种:

软链接:

  称为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件,在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。软链接会在选定的位置上生成一个文件的镜像,不会占用磁盘空间

如何生成:

ln -s libwiringPi.so.2.50 libwiringPi.so 
指令 参数   要被链接的源文件    软链接文件名字

硬链接:

  硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
如何生成:去掉软连接生成指令的 -s即可

ln libwiringPi.so.2.50 libwiringPi.so 
它会在你选定的位置上生成一个和源文件大小相同的文件

软链接完成后我们就可以进行带wiringPi库的交叉编译了:
这里记得要使用
-I(大写i)来指定头文件的路径;
-L(大写l)来指定路径去寻找库文件;
-l(小写l)来指定wiringPi库

arm-linux-gnueabihf-gcc demo2.c -I /home/xiexiong/lessonPI/WiringPi/wiringPi -L. -lwiringPi -o crossCompBinDemo2

生成的可执行文件crossCompBinDemo2拷贝到树莓派中就可以正常运行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值