問題タブ [crosstool-ng]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - crosstool-NG を使用して GCC の「カナダ クロス」コンパイルのホスト タイプを変更する方法
crosstool-NG をインストールし、arm-unknown-linux-gnueabi をターゲットとするホスト + ビルド x86 マシンに GCC をビルドしました。次に、arm-unknown-linux-gnueabi-gcc を使用して、ARM ボードで適切に動作するプログラムをコンパイルしました。
ARMでホストされるARMをターゲットにして、GCCを構築したいと考えています。専門用語は
どうすればいいですか?--host=arm-unknown-linux-gnueabi-gcc を渡す crosstool-NG に対して ./configure を実行する必要がありますか?
または、CC/etc の環境変数を変更する必要がありますか?
gcc - crosstool-NGを使用したARMクロスコンパイラの正しいオプションは何ですか
crosstool-NGを使用して、NASボックスで実行されているプロセッサをターゲットにするクロスコンパイラを構築しようとしています。
NASボックスはZyXELNSA210であり、dmesg出力の例が/proc/cpuinfoあります。
ターゲットオプションページのオプション、フラグ、および()の現在の設定:
- ターゲットアーキテクチャ(アーム)
- MMUを使用する(はい)
- エンディアン(リトルエンディアン)
- ビットネス(32ビット)
- デフォルトの命令セットモード(arm)
- EABIを使用する(はい)
- アーキテクチャレベル--with-arch=()
- CPUのアセンブリを発行します--with-cpu=()
- CPUに合わせて調整()
- 特定のFPUを使用する()
- 浮動小数点(ソフトウェア)
- ターゲットCFLAGS()
- ターゲットLDFLAGS()
「アーキテクチャレベル」と「CPU用のアセンブリを出力する」で、、、などのさまざまな組み合わせを試してきましたが、arm926ej-sどちらのオプションがどこに行くのかわかりません。armv5larmv5tej
crosstool-NGにはボックスで使用されているLinuxのバージョンがないため、ターゲットOSをベアメタルに設定しました。
また、ツールチェーンが構築されたら、同じオプションをコンパイラに再度渡す必要がありますか。
これまでのところ、試みによってIllegal instructionメッセージが作成されました。
編集
正しいパラメータを見つける方法を明示的に参照したARMGCCツールチェーンの設定に関する記事を誰かが教えてくれれば、それは私の質問に答えるでしょう。
c++ - crosstool-ng C++ コンパイラを動作させる方法
crosstool-ng を C と C++ の両方で動作させようとしています。menuconfig の使用中に C++ を選択したにもかかわらず、ビルドされていないようです。gcc コンパイラは期待どおりに動作しますが、g++ では動作しません
何が間違っているのかわからないので、助けていただければ幸いです。
ここにある手順に従いました: Crosstool-NG を使用した組み込み ARM システムの構築
注: arm-unknown-linux-gnueabi-g++bin ディレクトリには見つかりません。クロスツールのバージョン 1.16.0 と 1.15.3 を試しました
コード
私のbuild.logファイルでは、C++オプションがオンになっています
私はそれも見ますconfig.log:
android - crosstool-ng を使用してアーム用のネイティブ gcc をクロス コンパイルし、ツールチェーン、どのアーキテクチャ deps、どのビルド、ホスト、およびターゲットを使用しますか?
私はARM用のネイティブgccをビルドしてAndroidで実行したいと考えています。これは、glibcをビルドし、glibcにリンクされたGNUユーティリティをビルドしたいため、Androidフォンでネイティブにコンパイルしたいためです。
crosstools-ng を使用してクロスコンパイル ツールチェーンを構築しました。
私はglibcをクロスコンパイルしました。
tar などのネイティブ アーム (arm-exynos-linux-gnueabi) ユーティリティをいくつかビルドし、ビルドされた x-tools sysroot の lib ディレクトリを Android マシンの /lib にシンボリック リンクするときに、それらが Android フォンで動作することを確認しました。
次に、マシン上で開発できるように、ネイティブ gcc をビルドする必要があります。私は比較的経験が浅いため、クロスコンパイルに関していくつかの哲学的な問題を抱えています。
したがって、試行錯誤のアプローチですでに2日間過ごしましたが、今のところうまくいかないため、手順を正確に進める方法をお尋ねしたいと思います.
つまり、gcc は、gmp に依存する mpfr に依存する mpc に依存します。
では、どうすればよいのでしょうか。
どのアーキテクチャ deps をビルドし、どのホスト ターゲットとビルド オプションを使用するか?
- 機能しているツールチェーンを台無しにしないように、tools dir を作成し、そこにこれらの deps を構築しますか?
- gmp (ホスト、ビルド、ターゲットなし?)
- mpfr(同じ?)
mpc(同じ?)
それからgcc、どうやって?--host=arm-exynos-linux-gnueabi --build=i686-build_pc-linux-gnu --target=arm-exynos-linux-gnueabi ?
これは正しいですか、それとも上記の手順のいくつかを台無しにしていますか?
ちなみに、私はこのガイドhttp://forum.xda-developers.com/showthread.php?t=1299962に従って crosstool-ng ツールチェーンを構築しましたが、--host=arm だけでネイティブ アプリをコンパイルすることを推奨しています。 ..
私はそうしてきましたが、彼らは Android システムで動作しますが、私には正しくないように思えますが、それは --target=arm... ではないでしょうか?
私はひどく失敗しているので、上記の手順を手伝ってくれてありがとう。
linux - crosstool-ng、ディレクトリ構造、およびsysroot
crosstool-ngのおかげで、動作しているクロスコンパイラツールチェーンがあります:)-しかし、crosstool-ngは非常にまばらに文書化されており、クロスコンパイルはまったく新しいものです。このコンテキストでは、特定のホストとターゲットは重要ではないと思います。
ディレクトリ構造についていくつか基本的な質問があります。ツールチェーンは、ターゲットにちなんで名付けられたディレクトリにインストールされました。その中には一連のディレクトリがあります。
bin /のコンパイラはこの目的で動作するため、これは実際のクロスコンパイラビット用であると思います。内部にarm-unknown-linux-gnueabi/ディレクトリがあることに注意してください。つまり、そこにパスがあります../arm-unknown-linux-gnueabi/arm-unknown-linux-gnueabi。その中に別の木があります:
lib*ディレクトリはsysroot/へのシンボリックリンクです。binにあるものは、親ディレクトリ/binにあるものと同じクロスコンパイルツールのセットのようです。
だから私の最初の質問は:これらは何のためにあるのですか?そして、このディレクトリは何のためにあるのでしょうか?
次に、私の2番目の質問は、sysroot/をどのように使用する必要があるかということです。どうやらターゲットプラットフォームにネイティブなサポートライブラリ用なので、そのようなライブラリを構築する場合は、それをとして使用する必要があると--prefix思いますが、lib *はシンボリックリンクされているため、親ディレクトリを使用するのと同じことになります...ビンとsysrootまでのシンボリックリンクを持つこの「真ん中のディレクトリ」は混乱を招きます。(いくつかの)autotoolsスタイルのパッケージは「--with-sysroot」で構成できると思います。 それを見ると、その意味は何ですか?また、-prefixなどの他のオプションとの関連でどのように使用する必要がありますか?
qt - RaspberryPiのQt5.0.1をクロスコンパイルするときのエラー
RaspberryPi用にQt5.0.1(現時点では最新リリース)をクロスコンパイルしようとしています。私の設定は次のとおりです。
オペレーティングシステム:Ubuntu12.0432ビット
クロスコンパイラ:crosstool-NGプログラムから構築され、ここにある正確な手順を使用します
Raspberry Piオペレーティングシステム:Raspbian Wheezy 2013-02-09(/ mnt / raspberry-pi-rootfsにマウント)
コマンドの構成:
configureコマンドを実行すると、常に次のエラーで失敗します。
誰もがこれが何を意味するのか知っていますか?
私はここから最新のビルド済みのLinaroToolchainクロスコンパイラを試しましたが、Qtは少なくともビルドしますが、それを使用してコンパイルされたプログラムは、プログラムが実行されるとすぐにSIGILL(不正な命令)エラーを引き起こします。私が使用した構築されたクロスコンパイラは、適切なアーキテクチャを対象としていません。
ノート:
クロスコンパイルは非常に難しいことは承知していますが、何が起こっているのかをもっと理解したいと思います
linux - 既存のrootfsをカスタムツールチェーンと組み合わせる
EmdebianがインストールされたRaspberryPIがあり、プロジェクトをクロスコンパイルしたいと思います。
ツールチェーンを入手し、それを使用して簡単なプロジェクトを構築する方法については、たくさんのドキュメントがあります。私自身、crosstool-ngを使用してツールチェーンを構築し、正常に動作するhelloworldプログラムを作成しました。
私が得られないのは、他のライブラリに依存しているQtのようなより複雑なプロジェクトをクロスコンパイルする方法です。Qtの依存関係の1つであるため、例としてlibdbusを使用してみましょう。
インストールされたEmdebianにはすでにlibdbus.soが含まれているので、Qtのすべての依存関係のコンパイルには時間がかかるため、当然、自分のlibdbus.soをクロスコンパイルするのではなく、これを使用することをお勧めします。
クロスコンパイルの場合、私が理解している限り、2つの重要なディレクトリがあります。
- インストールされているすべてのライブラリとアプリケーションが存在する「ステージング」ディレクトリ。これは最初はツールチェーンのsysrootディレクトリのコピーであり、クロスコンパイルされるとさらに多くのライブラリが追加されます。
- 「rootfs」ディレクトリ。これは、デバイス上にあるものと同等です。基本的に、ドキュメントやヘッダーファイルなどの不要なものを含まないステージングディレクトリのコピーです。私が理解している限り、最善のアプローチは、必要なファイルをステージングディレクトリからrootfsにコピーすることです。
rootfsディレクトリの取得は簡単です。これは、デバイスからのNFSマウントである可能性があるためです。しかし、PIに既存のEmdebianインストール用のステージングディレクトリを取得するにはどうすればよいですか?ステージングディレクトリには、rootfsにインストールされていないdbusヘッダーなどを含める必要があります。
apt-get install libdbus-devを使用してdbusヘッダーをデバイスにインストールし、rootfsをステージングディレクトリとして使用する人もいます。この設定では、rootfsとステージングの区別がなくなり、rootfsがヘッダーやドキュメントなどで汚染されるという欠点があります。もちろん利点はそれが簡単なことです。
dbusヘッダーをホストマシンのステージングディレクトリに入れる最良の方法は何ですか?この状況で人々が使用する通常のアプローチは何ですか?
副次的な質問として、ツールチェーンを取得し、プログラムをコンパイルしてから、それをターゲットにコピーするというアプローチがまったく機能するのはなぜですか?ツールチェーンには、独自のバージョンのlibc、libstdc ++などが付属していますが、ターゲットにインストールされているバージョンと互換性がありませんか?特に、crosstool-ngでコンパイルされたカスタムツールチェーンを使用して作成する場合はどうでしょうか。
(Qtをコンパイルする方法を尋ねていないことに注意してください。自分で理解できます。私の質問は、カスタムツールチェーンを既存のインストール/ rootfsと組み合わせる場合のアプローチについて、より一般的です)
gcc - カスタム MIPS ツールチェーンと abicall に関する問題
私は、MIPS32 アーキテクチャ (リトル エンディアン) に焦点を当てたプロジェクトに取り組んでいます。ベンダーは、組み込み Linux バージョンを対象とする私のプロジェクトをコンパイルするための GNU ツールチェーンを提供してくれました。すべて問題なく動作します。GCC+Linux+uClibc ツールチェーンです。
ただし、最近、uClibc ビルドにいくつかの機能を追加する必要があったため、ベンダーのツールチェーンを自分のボックスで複製しようとしました。
crosstool-ng の助けを借りてすべてが正常に機能しましたが、プロジェクトをコンパイルしようとすると、あちこちで奇妙なリンカ警告が表示されます。
私が調査したところ、これらはかなり重大な警告です。オブジェクト ファイルを readelf で分析すると、ほぼ同じ出力が得られます。これらのファイルのどこにも .abicall セクションはありません。これは、プロジェクトのオブジェクト ファイルとツールチェーンのオブジェクト ファイルの両方に当てはまります。
ここで何が問題なのですか?これのデバッグをどこから開始すればよいかさえわかりません。
arm - fakeroot/fakechroot を使用する ARM Linux rootfs でネットワークが機能しない
buildrootを使用してrootfsを作成しましたが、 glibcでcrosstool-ngツール チェーンを使用しています。これにより、必要な最小限のファイル セットが表示されました。次に、すべてのライブラリを、squeeze の.debパッケージから直接取得したものに置き換えました。次に、ミックスにandを追加しました(これも.debパッケージから)。、、およびファイルも好みに合わせて変更しました。これを私のデバイスにアップロードした後、多くのことが機能しています。 正しい場所に連れて行ってくれます。 ルートを返します。しかし、DNS に関連するものは何も機能していません。たとえば、不正なアドレスを返します。私はコピーしましたarmelfakerootfakechrootresolv.confhostsnsswitch.confcd /whoamiping google.comlibnss_*とlibresolv のライブラリ、その他すべて必要だと思います。同じセットアップに入りますが、ホスト マシンでqemuとchrootを使用すると機能しますが、ターゲット デバイスで何が機能していないのかを把握しようとしています。
実行するstrace ping google.comと、次のようになります。
多くのことがうまくいきました。実行可能ファイルとライブラリを検索するときに、/data/local/targetをパスに追加することがわかっていました。さまざまなlibnss_*ライブラリが検出され、ホスト ファイルが単純に ではないことがわかりました/etc/hostsが、なぜ と の正しい場所が見つからなかったと思いますnsswitch.confかresolv.conf? これは、fakechroot私がそれをどのように使用しているかの問題または問題のようです。