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
Où /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