カスタムglibcのビルドとそのプログラムのコンパイル

カスタムglibcのビルドとそのプログラムのコンパイル

次のコマンドを使用してglibcを正常にクロスコンパイルしました。
../configure arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --target=arm-linux-gnueabi --prefix=`pwd` --build=i686-pc-linux-gnu` make -j4

手順自体は次のとおりです。この投稿これはすべてうまくいくようでした... glibcへの変更が反映されていないことに気づくまで。

ライブラリが実際にリンクされていることを確認するためのテストに次のように変更しました。まず、
修正して追加してから修正include/signal.hし、次のように関数定義を追加し続けました。 extern int my_test_fn(void);
signal/signal.csysdeps/posix/signal.c

int my_test_fn() {
    errno=13; //EACCESS
}

私のプログラムをコンパイルしようとするとエラーが発生します。
In function `tuning_library_init': /home/guru/workspace/tuning-library/tuning_library.c:1076: undefined reference to `my_test_fn' collect2: error: ld returned 1 exit status make: *** [host] Error 1

答え1

行き過ぎる前に:

このガイドを読んでくださいARMクロスコンパイル基本原理を理解します。使用されているバージョンに関係なく、使用される手順は常に一般的なガイドです。より深い内容を学ぶにはCLFS Wiki ナビゲーション。クロスコンパイルツールチェーンの構築が完了するまでこの本に従い、クロスコンパイルが必要なものをすべて構築するには、この本から離れてください。

glibcだけがクロスコンパイルするのではなく、ツールチェーン全体をクロスコンパイルする必要があります。ツールチェーンコンポーネントは常に次のとおりです。

  1. ツールボックス、アセンブラおよびリンカ用
  2. コンパイラ、おそらく湾岸協力協議会
  3. ACライブラリ、おそらくglibcまたは組み込みプラットフォーム用ucLibc
  4. デバッガ、おそらく広東開発銀行

望むより:eLinux用ツールチェーンWikiエントリそしてGNUツールチェーンのWikiPediaエントリ

新しいアーキテクチャを目指すたびに、特定の順序で構築する必要があります。上記のリンクを読んで順序を学ぶことができますが、CLFSの本はかなりよく書かれた説明とその理由をステップバイステップのコマンドと共に提供します。コーヒーやMountain Dewを一杯飲んだ後、プロセスを再開することをお勧めします。最初の数回実行すると数日かかるからです。このプロセスはより多くなるほど、より根深く位置づけられ、4~6時間ほどかかります。


ここで一般的な問題は、人々が誤ってホストヘッダーとツールチェーンをクロスコンパイルヘッダーと混同することです。おそらくあなたもそうでした。クロスコンパイルチェーンに含める必要があるヘッダファイルは、/home/username/usr/local/includeホストシステムを汚染しないようにどこかに保存する必要があります。

関連情報