问题描述:
我想使用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文件如下:
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <wiringPi.h>
- #include <wiringPiSPI.h>
- int main(void)
- {
- int chan=0;
- int speed=1000000;
- if( wiringPiSPISetup (chan, speed)==-1)
- {
- printf("Could not initialise SPIn");
- return;
- }
- printf("When ready hit enter\n");
- (void) getchar();// remove the CR
- }
复制代码