У меня есть модель RPI 3 B, и я хочу скомпилировать небольшую программу для взаимодействия с SPI устройства. Я пишу программу на своем рабочем столе Linux, поэтому хочу перепрограммировать программу.
Для этого я установил кросскомпилятор здесь: https://github.com/raspberrypi/tools
Я использую библиотеку witingPi поэтому я следовал этим инструкциям installaion: http://wiringpi.com/download-and-install/
Программа Я пишу это один из примеров из Интернета (просто чтобы убедиться, Я могу скомпилировать и запустить его):Ссылка на libwiringPi на кросс-компилятор для RPI
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <wiringPiSPI.h>
#define CHANNEL 1
void send3(uint8_t a, uint8_t b, uint8_t c) {
uint8_t buf[3];
buf[0] = a;
buf[1] = b;
buf[2] = c;
wiringPiSPIDataRW(CHANNEL, buf, 3);
}
int main(int argc, char** argv) {
if (wiringPiSPISetup(CHANNEL, 4000000) < 0) {
fprintf (stderr, "SPI Setup failed: %s\n", strerror (errno));
exit(errno);
}
printf("start\n");
send3(0x40, 0x0A, 0x0B);
send3(0x41, 0x0A, 0x00);
send3(0x40, 0x00, 0xFF);
send3(0x40, 0x0C, 0xFF);
send3(0x40, 0x13, 0x00);
send3(0x40, 0x01, 0x00);
send3(0x40, 0x04, 0xFF);
printf("done\n");
return 0;
}
проблема заключается в том, что я не могу получить тяги части с библиотекой wiringPi к работе: компиляции часть работает хорошо: ./arm-linux-gnueabihf-gcc -c /home/guy/main.c -o /home/guy/main.o -I /home/guy/toolchain/wiringPi/wiringPi
Где /home/guy/toolchain/wiringPi/wiringPi
- это путь к развязкам и заголовкам wiringPi. Я уверен, что это сработало хорошо, так как компиляция прошла успешно (это означает, что доступ к заголовкам проводки Pi преуспел).
Далее я попробовал следующую команду, чтобы связать код с библиотекой wirinPi и создать исполняемый файл: ./arm-linux-gnueabihf-gcc -L/home/guy/toolchain/wiringPi/wiringPi -o "AngleCalculator" /home/guy/main.o -lwiringPi
Это не удалось, и я получил следующее сообщение: /home/guy/toolchain/wiringPi/wiringPi/libwiringPi.so: file not recognized: File format not recognized
Некоторые должности предложили использовать -static
флаг во время связи, но он все еще не работает, и я получил следующее сообщение: /home/guy/toolchain/rpi2/tools/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
. Я думаю, это потому, что нет статической версии wiringPi.
Выполнение этой же команды связи на самом устройстве RPI работает успешно. Я понятия не имею, что вызывает эту ошибку. Есть ли другая версия gcc-кросс-компилятора, которую я должен использовать? Может быть, я должен использовать другую версию wiringPi?
Благодаря