2016-04-09 3 views
1

У меня есть модель 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?

Благодаря

ответ

1

После дальнейших исследований, я обнаружил, что это мой плохо:
При загрузке библиотеки wiringPi, я построил его с моим набором инструментами рабочего стола. Это создало такой файл, который при попытке связать его с инструментальной цепочкой pi вызвал ошибку.
Я скопировал такой файл из pi на свой рабочий стол, и все сработало нормально.