4

私は x86 で、armhf 用に C++ で書かれた apache thrift プログラムをクロスコンパイルしようとしています。と をインストールgcc-arm-linux-gnueabihfg++-arm-linux-gnueabihfましapt-getたが、それらを使用してプログラムをコンパイルすると、

skipping incompatible /usr/local/lib/libthrift.so when searching for -lthrift

そこで、このガイドを使用して armhf 互換の libthrift.so をコンパイルするように thrift を構成しようとしたので、bash で:

./configure CXX=arm-linux-gnueabihf-g++ CC=arm-linux-gnueabihf-gcc --prefix=/BBB/thrift --host=arm-linux-gnueabihf --with-cpp CFLAGS="-g -O2 -I$DIR/include" LDFLAGS="-L$DIR/lib

しかし、私は得ました:

checking for libevent >= 1.0... configure: error: in 'home/xic/thrift-0.9.0': configure: error: cannot run test program while cross compiling

そのため、 libeventを正常にコンパイルしましたが、それでも機能しません。リサイクルショップを調べてみるとconfig.log、なるほど

/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lfl collect2: ld returned 1 exit status

どうやらフレックスもクロスコンパイルする必要があります。これは本当にこれを行うための最良の方法ですか、それともより高速/簡単な方法はありますか?

ps。armhf を使用する Beaglebone Black のクロスコンパイルを行っています。

4

2 に答える 2

8

私のシステムではlibfl、次のコマンドを実行してインストールしました。これは、flex を手動でクロスコンパイルするよりも簡単なはずです。

sudo xapt -a armhf -m libfl-dev

この問題を解決するにはcannot run test program while cross compiling、 libevent サポートなしで (それがオプションである場合) を に渡し--without-libeventてThrift をビルドするか、 の使用をに置き換えてconfigure変更することができます。に渡さない限り、 で同様の変更を行う必要があることに注意してください。のファイルを変更した後に実行することを忘れないでください。aclocal/ax_lib_event.m4AC_RUN_IFELSEAC_LINK_IFELSEaclocal/ax_lib_zlib.m4--without-zlibconfigureautoconfaclocal

これらの変更を行った後、次のコンパイル エラーが発生する可能性があります。

/usr/arm-linux-gnueabihf/include/c++/4.6.3/cstdlib:119:11: エラー: '::malloc' が宣言されていません /usr/arm-linux-gnueabihf/include/c++/4.6.3 /cstdlib:127:11: エラー: '::realloc' が宣言されていません

IMO、これを修正する最も簡単な方法は、から次の行を削除することですconfigure.ac

AC_FUNC_MALLOC
AC_FUNC_REALLOC

繰り返しますが、autoconfから行を削除した後に実行する必要がありますconfigure.ac

configure最後に、選択したオプションで再実行できます。私のシステムでは、次のように実行しました。

./configure --host=arm-linux-gnueabihf --with-cpp --without-tests \
   --without-qt4 --without-c_glib --without-ruby --without-python

--without-testsx86 ビルド マシンで armhf テスト バイナリを実行しようとするビルドによって引き起こされる問題を回避するためのオプションが必要になります。

余分な依存関係をインストールする必要がないように、残り--without-*のオプションを渡しました。QT、Glib、Ruby、および Python のサポートが必要ない場合は、ビルドを簡素化するために同じことを行うことをお勧めします。

于 2013-08-16T18:31:09.767 に答える
3

Thrift 0.9.0 は、クロス コンパイルが壊れています。Autoconf テスト スクリプトで静的パスが大量に含まれています。

この件に関して彼らの Jira にバグがありますが、物事はそれほど進んでいません (基本的に、すべてのものの --includedir を設定するかどうかを尋ねます... (ヒント: クロス コンパイルでは、あなたが何かをいじる必要はありません)それは Autotools の設定であり、彼らが最初にすべきことは、ホストから離れた固定パスを探すことでした))

PHP のビルドを無効にすることはできません。残念なことに、これにはワンストップ ショップが必要だったのですが、Google とコミュニティ全体がこれにボールを落としました (RPC は冗談です...いくつの異なる実装がありますか?そしてそれらのどれも C/をサポートしていませんC++/Python/C# と同時に互換性があります...)。

于 2013-08-17T22:33:22.913 に答える