2016-04-09 1 views
1

J'ai un RPI 3 modèle B, et je veux compiler un petit programme pour interagir avec le SPI de l'appareil. J'écris le programme sur mon bureau Linux donc je veux compiler le programme.
Pour cela, j'ai installé le compilateur croisé d'ici: https://github.com/raspberrypi/tools
J'utilise la bibliothèque witingPi donc j'ai suivi ces instructions pour installaion: http://wiringpi.com/download-and-install/
Le programme que je suis en train d'écrire est un des exemples à partir du Web (juste pour se assurer Je peux compiler et l'exécuter):Liaison libwiringPi sur le compilateur croisé pour 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; 
} 

le problème est que je ne peux pas la partie de liaison avec la bibliothèque wiringPi au travail: la partie de compilation fonctionne bien: ./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 est le chemin vers les librairies et les en-têtes de wiringPi. Je suis sûr que cela a bien fonctionné depuis que la compilation a été réussie (ce qui signifie que l'accès aux en-têtes de wiringPi a réussi).

Ensuite, je l'ai essayé la commande suivante pour lier le code avec la bibliothèque wirinPi et de créer l'exécutable: ./arm-linux-gnueabihf-gcc -L/home/guy/toolchain/wiringPi/wiringPi -o "AngleCalculator" /home/guy/main.o -lwiringPi

Cette tentative échoua et je reçu le message suivant: /home/guy/toolchain/wiringPi/wiringPi/libwiringPi.so: file not recognized: File format not recognized

Certains postes ont suggéré d'utiliser la -static drapeau pendant le lien, mais cela n'a toujours pas fonctionné et j'ai reçu le message suivant: /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. Je suppose que c'est parce qu'il n'y a pas de version statique de wiringPi.

L'exécution de la même commande de liaison sur le périphérique RPI lui-même fonctionne correctement. Je n'ai aucune idée de ce qui cause cette erreur. Existe-t-il une autre version du compilateur croisé gcc que je devrais utiliser? Peut-être que je devrais utiliser une autre version de wiringPi?

Merci

Répondre

1

Après une enquête plus approfondie, j'ai trouvé que c'est mon mauvais:
Lors du téléchargement de la bibliothèque wiringPi, je l'ai construit avec la chaîne d'outils de mon bureau. Cela a créé un fichier de sorte qu'en essayant de le lier avec la chaîne d'outils de pi a causé une erreur.
J'ai copié le fichier de la pi sur mon bureau et tout a bien fonctionné.