Swiften は XMPP クライアント ライブラリです。私の目的は、Linux を実行する ARM 組み込みターゲット用にビルドすることでした。
SCons の知識がほとんどない状態で、クロスコンパイルを成功させる方法をハッキングしました。2 つの makery ファイルSConscript.boot
とSConstruct
.
私には2つのタスクがありました(どちらも満足に達成できませんでした):
- ツール チェーンをネイティブ コンパイルからクロス コンパイルに正常に切り替える
- OpenSSL ライブラリが正常にリンクされていることを確認します ( swiftimプロジェクトでは提供されません
3rdParty
。フォルダーにインストールしてビルドする必要があります)。
ツール チェーンをネイティブ コンパイルから ARM のクロス コンパイルに切り替える
私の ARM クロス ツール チェーン コンポーネント、gcc、g++、ld などはここにあります。
/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/arm-linux-gnueabihf/bin/
scons
ネイティブ ツール (通常の場所) の代わりにクロス ツール チェーン (上記の場所から) を使用するように指示する方法が見つかりませんでした/usr/bin
。呼び出し ( ./scons Swiften
) の前に環境変数の完全修飾値を指定すると、CC と CXX は機能しませんでした (推奨されませんが、1 か所で言及されています)。
Scons は、makery に多くのアドホックな変更を加えた後でも、ネイティブツール チェーンのみを選択します。
そのため、ハックとして、ネイティブ ツール チェーンをクロス ツール チェーンを指すように変更する必要がありました。
/usr/bin/gcc -> /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/bin/arm-linux-gnueabihf-gcc-4.7.3*
/usr/bin/g++ -> /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/bin/arm-linux-gnueabihf-g++*
ARM の最初のコンパイル ブレークは、以下の行をビルド スクリプトのデフォルト部分に追加することで修正されましたSConscript.boot
。
env.Append(CPPDEFINES = ["_LITTLE_ENDIAN"])
次のコンパイル中断は、OpenSSL ヘッダー ファイルが見つからないことに関係しています。場所の問題を修正するには、以下の行を SConscript.boot に導入する必要がありました。
vars.Add(PackageVariable("openssl", "OpenSSL location", "/home/auro-tripathy/swiftim/swift/3rdParty/OpenSSL/openssl-1.0.1c/"))
OpenSSLとの連携
サンプルの Switften プログラムを OpenSSL ライブラリとリンクするには、それらがビルドされた場所からツールチェーン ライブラリの場所に移動libssl.a
し(個別にビルド) する必要がありました。libcrypto.a
mv ~/swiftim/swift/3rdParty/OpenSSL/openssl-1.0.1c/libcrypto.a /opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/lib/gcc/arm-linux-gnueabihf/4.7.3/.
ヘルプ
scons の動作を理解していないので、動作させるためにいくつかのハックを行いました。
次のことを手伝ってほしい:
- 他のターゲットと同様に、ARM-embedded と呼ばれる新しいターゲットを導入します。アイフォン、アンドロイドなど
- OpenSSL をビルドに統合するクリーンな方法。
更新 dirkbaechle ごとに、以下のスクリプトを再試行すると動作します
export CC=/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/arm-linux-gnueabihf/bin/gcc
export CXX=/opt/toolchain/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/arm-linux-gnueabihf/bin/g++
./scons Swiften