3

RPI 3 モデル B を使用しており、デバイスの SPI と対話するための小さなプログラムをコンパイルしたいと考えています。Linux デスクトップでプログラムを作成しているので、プログラムをクロスコンパイルしたいと考えています。
このために、ここからクロス コンパイラをインストールしまし た : https://github.com/raspberrypi/tools 私が書いているプログラムは、Web からの例の 1 つです (コンパイルして実行できることを確認するためだけに):

#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 ライブラリとのリンケージ部分を動作させることができないことです。コンパイル部分はうまく機能 します。wireingPi ライブラリとヘッダーへのパスは./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 ヘッダーへのアクセスが成功したことを意味します)、これはうまく機能したと確信しています。

次に、次のコマンドを試して、コードを 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. これは、wireingPi の静的バージョンがないためだと思います。

RPI デバイス自体で同じリンケージ コマンドを実行すると、正常に機能します。このエラーの原因がわかりません。使用すべき gcc クロスコンパイラの別のバージョンはありますか? たぶん、別のバージョンのwiringPiを使用する必要がありますか?

ありがとう

4

1 に答える 1

1

さらに調査した結果、これは私の悪い点であることがわかりまし
た。wireringPi ライブラリをダウンロードするときに、デスクトップのツールチェーンを使用してビルドしました。これによりsoファイルが作成され、piのツールチェーンとリンクしようとするとエラーが発生しました。
so ファイルを pi からデスクトップにコピーしましたが、すべて正常に動作しました。

于 2016-04-09T16:30:49.137 に答える