0

しばらくの間、組み込み Linux (2.6) 用に jamvm (GNU クラスパスを含む) をクロスコンパイルしようとしましたが、デリケートな場所で立ち往生しています。

まとめてみます: 多くのエラーの後、最終的にアーキテクチャ用のパッケージをコンパイルしましたが、./configure で --enable-static を指定しましたが、jamvm を実行しようとすると、GLIBC 2.4 が見つからないというエラーが表示されます。 . 問題は、私は 2.3.5 バージョンを持っていて、私のアーキテクチャ用に 2.4 をコンパイルすることは、現時点ではオプションではないということです (それは、まったく新しい問題から始めることを意味します)。

この問題は、組み込みターゲットでサポートされているツールチェーンとは異なるツールチェーンを使用してマシンからビルドしたことが原因であると思われます。

問題は、自分の CPU に一致する正確な gcc、glibc、binutils、および Linux カーネル ヘッダーを知っていることですが、問題は、この情報をクロスコンパイル/ビルド プロセスに組み込む方法がわからないことです。

しかし、私のマシンが異なるツールチェーンを使用しているという事実がクロスコンパイルに影響を与えると仮定するのはおそらく間違っています。

簡単に言うと、組み込みシステムでサポートされていない glibc 2.4 やその他のライブラリについて文句を言わないように、jamvm をクロスコンパイルする必要があります (自分のアーキテクチャに適したツールチェーンを知っていると仮定します)。

この問題に関して何か助けていただければ幸いです。また、私の推論が正しくない場合は、このトピックに光を当てていただければ幸いです。

4

1 に答える 1

2

あなたの問題を 100% 理解しているかどうかはわかりませんが、以下を使用して GLIBC 2.4 への依存関係を作成しているシンボルのリストを作成してみてください:

$ readelf -Ws <your_jamvm_executable_file> | grep \@GLIBC_2\.4

grep(シンボルが見つからない場合は、よりリラックスした検索パターンを使用してください)

次に、問題のあるシンボルが GLIBC に他のバージョン (GLIBC v2.3.5 以下) があるかどうかを確認します。例として使用posix_spawnします:

(1:517)$ readelf -Ws /lib/libc.so.6 | grep posix_spawn\@
  1666: 000d8800    51 FUNC    GLOBAL DEFAULT   12 posix_spawn@@GLIBC_2.15
  1667: 00127760    51 FUNC    GLOBAL DEFAULT   12 posix_spawn@GLIBC_2.2

これは、posix_spawnが GLIBC v2.15 をプルしていることが判明した場合posix_spawn、GLIBC v2.2 から使用するためにプログラムを再コンパイルして、GLIBC 2.15 依存関係を削除できることを意味します ( posix_spawnGLIBC v2.15 をプルしている唯一のシンボルである場合)。

実際にシンボルを使用するユニット (またはファイル)posix_spawnの先頭で、ソース コード内でこのディレクティブを使用して、使用するバージョンを選択できます。.c.cpp

__asm__(".symver posix_spawn,posix_spawn@GLIBC_2.2");

これがあなたが求めているものでない場合は申し訳ありません。

于 2014-07-02T12:02:05.407 に答える