查看: 4709|回复: 6
收起左侧

使用wiringPi库的SPI问题

2013-5-1 08:57:54 | 显示全部楼层 |阅读模式
问题描述:
我想使用WiringPi库来控制Pi的SPI,但是编译时遇到问题:
我在main.c文件中只调用SPIsetup函数,且把main.c文件直接放到了/home/pi/wiringPi/wiringPi/文件夹下面。
首先编译得到main.o,然后试图将该文件夹下的相关文件进行连接输出:

pi@raspberrypi ~/wiringPi/wiringPi $ gcc -o rfpi main.o wiringPi.o wiringPiSPI.o piHiPri.o piNes.o piThread.o gertboard.o lcd.o softPwm.o softServo.o softTone.o wiringPiFace.o
wiringPi.o: In function `wiringPiISR':
wiringPi.c.text+0xb04): undefined reference to `pthread_create'
piThread.o: In function `piThreadCreate':
piThread.c.text+0x18): undefined reference to `pthread_create'

看起来是缺少了相关的目标文件,发现文件夹里还有个动态库 libwiringPi.so.1.0,于是连接时把这个动态库加进来:


pi@raspberrypi ~/wiringPi/wiringPi $ gcc -o rfpi main.o wiringPi.o wiringPiSPI.o piHiPri.o piNes.o piThread.o gertboard.o lcd.o softPwm.o softServo.o softTone.o wiringPiFace.o -L. -llibwiringPi
/usr/bin/ld: cannot find -llibwiringPi
collect2: ld returned 1 exit status

提示在 /usr/bin/ld 目录下找不到这个库文件,为什么会在这个目录下找,我已经把库文件的路径(当前目录添加到了编译选项中),难道是文件名不对吗?

pi@raspberrypi ~/wiringPi/wiringPi $ gcc -o rfpi main.o wiringPi.o wiringPiSPI.o piHiPri.o piNes.o piThread.o gertboard.o lcd.o softPwm.o softServo.o softTone.o wiringPiFace.o -L. -llibwiringPi.so.1.0
/usr/bin/ld: cannot find -llibwiringPi.so.1.0
collect2: ld returned 1 exit status

使用完整的文件名还是不行。
我在编译之前已经使用gpio load spi 命令加载了SPI模块到内核,而且可以确认我的wiringPi库已经成功安装。
请教大家该怎么进行编译。

另外,我的main.c文件如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <wiringPi.h>
  5. #include <wiringPiSPI.h>

  6. int main(void)
  7. {
  8.   int chan=0;
  9.   int speed=1000000;

  10.   if( wiringPiSPISetup (chan, speed)==-1)
  11.   {
  12.     printf("Could not initialise SPIn");
  13.     return;
  14.   }
  15.   printf("When ready hit enter\n");
  16.   (void) getchar();// remove the CR
  17. }
复制代码
回复

使用道具 举报

2013-5-1 10:57:24 | 显示全部楼层
-lwiringPi

还有libwiringPi.so.1.0这个文件做一个连接libwiringPi.so指向.so.1.0这个

-l不用在前面加lib,编译器自己会去寻找
回复 支持 反对

使用道具 举报

 楼主| 2013-5-3 13:10:46 | 显示全部楼层
代码东 发表于 2013-5-1 10:57
-lwiringPi

还有libwiringPi.so.1.0这个文件做一个连接libwiringPi.so指向.so.1.0这个

谢谢!

请问怎么做这个连接?
回复 支持 反对

使用道具 举报

 楼主| 2013-5-3 13:11:25 | 显示全部楼层
代码东 发表于 2013-5-1 10:57
-lwiringPi

还有libwiringPi.so.1.0这个文件做一个连接libwiringPi.so指向.so.1.0这个

按照Gordons网站WiringPi上wiringPi的说明,编译时使用-I/usr/local/include -L/usr/local/lib -lwiringPi选项,出现如下错误。
  1. pi@raspberrypi ~/wiringPi/wiringPi $ make rfpi
  2. gcc -o main.o wiringPi.o wiringPiSPI.o piHiPri.o piNes.o piThread.o gertboard.o lcd.o softPwm.o softServo.o softTone.o wiringPiFace.o -I/usr/local/include -L/usr/local/lib -lwiringPi
  3. /usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../arm-linux-gnueabihf/crt1.o: In function `_start':
  4. (.text+0x34): undefined reference to `main'
  5. collect2: ld returned 1 exit status
  6. make: *** [rfpi] Error 1
复制代码
回复 支持 反对

使用道具 举报

 楼主| 2013-5-3 13:12:27 | 显示全部楼层
按照Gordons网站WiringPi上wiringPi的说明,编译时使用-I/usr/local/include -L/usr/local/lib -lwiringPi选项,出现如下错误。
  1. pi@raspberrypi ~/wiringPi/wiringPi $ make rfpi
  2. gcc -o main.o wiringPi.o wiringPiSPI.o piHiPri.o piNes.o piThread.o gertboard.o lcd.o softPwm.o softServo.o softTone.o wiringPiFace.o -I/usr/local/include -L/usr/local/lib -lwiringPi
  3. /usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../arm-linux-gnueabihf/crt1.o: In function `_start':
  4. (.text+0x34): undefined reference to `main'
  5. collect2: ld returned 1 exit status
  6. make: *** [rfpi] Error 1
复制代码
回复 支持 反对

使用道具 举报

 楼主| 2013-5-4 10:53:17 | 显示全部楼层
大家都不用wiringPi库?
大家都怎么控制IO?
回复 支持 反对

使用道具 举报

 楼主| 2013-5-9 22:27:14 | 显示全部楼层
终于解决了,仔细看了他网站上对tuxx例子的编译操作:

cc -o tuxx -Wall -I/usr/local/include -L/usr/local/lib tuxx.c -lwiringPi
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们,了解更多

官方微信

服务时间:10:00-16:00

13714503811

公司地址:深圳市龙岗区南湾街道东门头路8号

Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
快速回复 返回列表 返回顶部