2016-04-09 33 views
1

Ich habe ein RPI 3 Modell B, und ich möchte ein kleines Programm für die Interaktion mit dem Gerät SPI kompilieren. Ich schreibe das Programm auf meinem Linux-Desktop, also möchte ich das Programm kompilieren.
Dazu habe ich die Cross-Compiler von hier installiert: https://github.com/raspberrypi/tools
ich witingPi Bibliothek bin mit so folgte ich diese Anweisungen für installaion: http://wiringpi.com/download-and-install/
Das Programm ich schreibe ist eines der Beispiele aus dem Web (nur um sicherzugehen ich kann es) kompilieren und ausführen:Linking libwiringPi auf Cross Compiler für 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; 
} 

Das Problem ist, dass ich nicht das Gestängeteil mit der wiringPi Bibliothek an der Arbeit kann: der Compilation Teil funktioniert gut: ./arm-linux-gnueabihf-gcc -c /home/guy/main.c -o /home/guy/main.o -I /home/guy/toolchain/wiringPi/wiringPi
Wo /home/guy/toolchain/wiringPi/wiringPi ist der Pfad zu den WiringPi-Bibliotheken und -Köpfen. Ich bin mir sicher, dass dies gut funktioniert hat, da die Kompilierung erfolgreich war (dh der Zugriff auf die wiringPi-Header ist erfolgreich).

Als nächstes habe ich den folgenden Befehl versucht, den Code mit der wirinPi Bibliothek zu verknüpfen und die ausführbare Datei erstellen: ./arm-linux-gnueabihf-gcc -L/home/guy/toolchain/wiringPi/wiringPi -o "AngleCalculator" /home/guy/main.o -lwiringPi

Dies scheiterte, und ich bekam die folgende Meldung: /home/guy/toolchain/wiringPi/wiringPi/libwiringPi.so: file not recognized: File format not recognized

Einige Beiträge mit vorgeschlagen, die -static Flagge während der Verknüpfung, aber es hat immer noch nicht funktioniert und ich habe die folgende Nachricht: /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. Ich denke, das liegt daran, dass es keine statische Version von wiringPi gibt.

Die Ausführung desselben Verbindungsbefehls auf dem RPI-Gerät selbst funktioniert erfolgreich. Ich habe keine Ahnung, was diesen Fehler verursacht. Gibt es eine andere Version von GCC-Cross-Compiler, die ich verwenden sollte? Vielleicht sollte ich eine andere Version von wiringPi verwenden?

Dank

Antwort

1

Nach einer weiteren Untersuchung habe ich festgestellt, dass dies mein schlecht:
Wenn die Bibliothek wiringPi Herunterladen ich es mit meinen Toolchain-Desktop gebaut haben. Dies erzeugte eine Datei, die beim Versuch, sie mit der Werkzeugkette des Pi zu verbinden, einen Fehler verursachte.
Ich habe die so Datei von der Pi auf meinen Desktop kopiert und alles hat gut funktioniert.