2017-01-23 12 views
2

私はDebian VMでEclipseでコーディングしており、Raspberry Pi Zeroでクロスコンパイルしています。私はmraaライブラリを使いたいと思っていますが、何時間もの闘争の後にはまだそれを動作させることはできません。 - ターゲット(Raspi zero)では、CMakeを使ってローカルでmraaをコンパイルすることができます。これは、私がC++の例をローカルで演奏すると完璧に動作します。 - ホストでは、ターゲットから* .soファイルをコピーしましたが、クロスコンパイラはそれを好きではありません(定義されていない参照エラー)。 Eclipseの設定では、インクルードパスにヘッダーディレクトリを追加し、共有ライブラリディレクトリをライブラリ検索パス(-L)に追加し、-lmraaフラグを追加しました。私のクロスコンパイラは共有ライブラリを見つけることができません

私は間違っていますか?私はCMakeを使ってホスト上でMRAAをコンパイルするはずですか?もしそうなら、私はどのように私のクロスコンパイラをCMakeで定義するのですか?

+0

'しかし、クロスコンパイラはそれを好きではありません(未定義の参照エラー)'。 **未定義の参照**は、リンカーが**指定されたすべてのライブラリ**を持っていることを意味しますが、これらのライブラリには必要なシンボルが含まれていません。質問を編集して**正確なエラーメッセージ**を追加してください。 – Tsyvarev

+0

リンカーはなぜそれが呼び出されているか気にしないことに注意してください。 'cmake'は便利ですが、魔法を使うことはできません。 – MSalters

答えて

0

以前の私の質問を編集していないため申し訳ありませんが、時々質問は...基本的に

あなたが答えを見つける一度のみ明らかになり、私はソースコードを持っていたため、ライブラリ(MRAA)を使用したいとcmakeファイル。私はターゲット(私のRasPi Zero)で単にcmakeを実行してから、Eclipseでクロスコンパイルするために.so(共有ライブラリ)ファイルをホストに転送することができたと考えました。しかし、それは動作しませんでした。

代わりに、私はホスト上でcmakeを使ってライブラリをコンパイルしました。そのためには、すべての依存関係のために、クロスコンパイラへのリンクと、ターゲットに似たルートファイルシステムへのリンクを提供する必要があります。だから私はすべてを定義するためにtoolchain.cmakeファイルを作成し、cmakeを実行したときにこのツールチェーンファイルをオプションとして呼び出しました。

すべてがここで説明されていますhttp://www.vtk.org/Wiki/CMake_Cross_Compiling

クロスコンパイラとルート・ファイル・システムは、ここで提供されています https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64

をそして、これはコンパイル時に誰か他の人の共有ライブラリを使用するための適切な方法のようですあなたのターゲット(私の場合、Raspberry Pi Zero)のバージョンは存在しません。

関連する問題