2017-12-06 17 views
0

私はC++プログラムをarmv5にクロスコンパイルしようとしています。 armv5をクロスコンパイルするだけで、次のエラーが表示されます。 GLIBC_2.17が見つかりません(libstdC++、libdbus、libsystemd、およびliblzmaで必要です) ターゲットプラットフォームでのlibcの現在のバージョンが15であることがわかりました。別のバージョンのlibcでコンパイル

1)安全に更新する方法はありますか?ターゲットにインターネット接続がなく、Telnetごとにしか接続できません。問題は、アップデートが失敗した場合、デバイスに新しいOSをフラッシュするだけのアクセス権がなく、99%が壊れていると思います^^。

2)(1)に「実際にはありません」と表示された場合は、より新しいlibc15をコンパイルすることは可能ですか、15にダウングレードする方法はありますか? (コンパイルのためのVMを作成するので、何かが失敗した場合でも気にしません) 別のlibcバージョンに対してコンパイルするために何を指定しなければなりませんか?、まだそこに正しいフラット/パラメータが見つかりません...

ありがとう任意のヒントやアイデア、今この問題を抱えていると私はちょうどC + +クロスコンパイルまだ新しいソリューションを見つけるために新しいです。ここ 敬具、同じエラーを持つすべての人のための

+0

システム全体にインストールすることなく、クロスコンパイルチェーン全体をダウングレードするか、新しいlibcをプラットフォームにアップロードしてください。実行時に新しいバージョンと実行可能ファイルをリンクするには、rpathまたはLD_LIBRARY_PATHを使用します。 –

+0

役立つことがあります:https://stackoverflow.com/questions/2856438/how-can-i-link-to-a-specific-glibc-version?rq=1 – BartekPL

+0

タイトルに解決を追加しないでくださいあなたの答えは[ツアー]をご覧ください。 –

答えて

0

[OK]を、私の解決策: LD_LIBRARY_PATH/RPATHの事はld-linux.soからのパスがハードコーディングされていることを念頭に置いて取り組んでいます。そのため、LD_LIBRARY_PATHまたは他の依存関係エラーで指定されたフォルダ内にすべてのlibsを持つのが良いでしょう。 クロスコンパイルツールチェーンをダウングレードする方法も同様に働いていて、最後に全問題を修正しました(LD_LIBRARY_PATHソリューションで「カーネルが古すぎるエラー」に遭遇しました)が、特に古いカーネルの場合はもっと難解です。

CXX:ここで溶液のためのCXXを指定=アーム-Linuxベースgnueabi-G ++

CXXFLAGS = -march =のARMv5 -msoft-フロート -pipe \ -mfloat-ABIソフト= -03 \ -DPCAP_CREATE \ -std = C++ 1yと-Wmissing-含ま-dirsの\ -D_GLIBCXX_USE_NANOSLEEP \ -g \ -fno-を推論-のinit-リスト

だから私はそれを使用してコンパイル交差して作ることができませんでしたC++ 11以降で、libc15を使用したArmv5の場合はうんざりです。

最高のお礼

関連する問題