問題タブ [uclibc]

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.

0 投票する
1 に答える
82 参照

c++ - C++: OpenWRT ディストリビューションへの ifstream getline の問題のクロスコンパイル


カスタマイズした OpenWRT ディストリビューション内で単純な C++ コードをコンパイルしようとしていますが、getline命令でエラーが発生しました。
ここに私のコードのスナップショットがあります:

この種の警告が表示されます (-Werror フラグを付けてコンパイルしています)

何が問題なのか理解できません。
私の OpenWRT ディストリビューションでは、gcc 5.xuClibc-0.9.33.2を使用しています。
どんな助けでも大歓迎です。ありがとう!

0 投票する
2 に答える
7614 参照

linux - パッケージ開発のために Buildroot パッケージのソースを変更するには?

uclibcを使用してツールチェーンを構築するためにbuildrootを使用しています。ここで、buildrootはすべてのパッケージをダウンロードし、それらを抽出してすべてビルドします。

ツールチェーンのuclibcソースを変更してから、ツールチェーンを新しいソースで再コンパイルしたいのですが、どうすればきれいな方法で実行できるのか理解できません..

ビルドが完了すると、抽出されたすべてのソースが " <buildroot-src>/output/build " にあります。ただし、buildroot はビルド時にこのディレクトリを中間としてのみ使用するため、それらを変更しても意味がありません。

だから私の考えは、おそらくuclibcパッケージの .mk ファイルを変更して、それをダウンロードして抽出する代わりに、変更したソースを使用するようにすることでした (そこで実行できるかどうかはまだわかりません) が、それは少し醜い解決策のようです..

だから私の質問はこれです: buildroot に既存のソースを使用してパッケージをビルドするように指示するより良い方法はありますか?

0 投票する
1 に答える
90 参照

linux - exit() 中の uClibc 共有ライブラリのアンロード

初期化中にワーカー スレッドを作成する共有ライブラリを使用しています。アプリは uClibc と連携しています。__pthread_cond_wait()main() から戻ると、共有ライブラリが cleanup() コードから適切に停止しないワーカー スレッドでクラッシュするか、同様のエラーが発生します。クラッシュ時の main() スレッド スタックは次のとおりです。

共有ライブラリのソースがないため、ワーカーのクリーンアップ コードを修正できませんが、私の質問は次のとおりです。

uClibc が共有ライブラリのアンロードを開始すると、スレッドがまだ実行 (クラッシュ) するのはなぜですか? _dl_munmap上記のスタックエントリからそれらをアンロードしていると思います。main() が終了したときにすべてのスレッドが一時停止/停止されていることを確認する方法はありますか?

0 投票する
0 に答える
1062 参照

gcc - クロス コンパイル uClibc で一部の Linux カーネル ヘッダーが見つからない

ここでは、簡単な説明の後に詳細を示します。ARM EABI 用に uClibc をクロスコンパイルしようとしています。独自のコンパイル済み Linux カーネルがあり、ヘッダー ファイルを抽出しました。フォルダに入れました。uClibc の「.config」ファイルでは、変数 KERNEL_HEADERS= を適切なフォルダーに設定しています。実際、コンパイル中に特定のポイントまでヘッダーが検出されます。これが見つかって途中で壊れる例を次に示します。

"libc/inet/if_index.c"

そのファイルは、次のように、各ファイルに一連のチェーン インクルードを生成します。

"libc/inet/netlinkaccess.h" (これは、次の Linux ヘッダーの #include を行います)

"kernel_hdr/linux/rtnetlink.h" (これは #include 次のもの)

"kernel_hdr/linux/netlink.h" (これは次の #include 用)

"kernel_hdr/linux/kernel.h" (これは #include を試行して失敗します)

これが#include <asm/types.h>連鎖を断ち切ることです。#include <linux/xxx.h>butではない最初のものです<asm/xxx.h>。ファイル asm/types.h は存在しますが、見つかりません。警告もエラーもありません。それはただ言う

「エラー: 不明な型名 '__kernel_long_t'」

そのタイプは、壊れた一連のインクルードで定義されています。それが読み取れるかどうかを確認するために、いくつかの大きな構文エラーを入れました。いいえ!カーネルヘッダーのフォルダー構造認識の処理に問題があると思いました。カーネル ヘッダーを uClibc の通常のヘッダー (...uClibc/include/) とマージしようとしました。.config ファイルで KERNEL_HEADERS= (空またはフル パス) をどのように設定しても、まったく同じ動作が得られます。これを解決する方法がわかりません。

私のセットアップの詳細は次のとおりです。

ワークステーション: Ubuntu 16.04 LTS

uClibc は、3 日前にダウンロードされた GIT の最新バージョンです

ザイリンクス git からの Linux カーネル バージョン 4.9.0。(私は Zynq デュアル Cortex A9 で作業しています)

GCC ARM EABI はザイリンクス SDK 2017.1 から提供されます。

そのツールチェーンを使用して、カスタム FSBL (第 1 段階のブート ローダー)、カスタム Linux カーネル (u-boot をスキップし、FSBL はカーネルを直接ロードします)、デバイス ツリー、およびパッケージ全体を正常にコンパイルし、ハードウェア上で rootfs まで実行しました。 . 現在、カスタム rootfs を構築しています (busybox 成功、dropbear など)。唯一の失敗は、この uClibc がコンパイルできないことです。これは、ヘッダー ファイルが存在するにもかかわらず、一部のヘッダー ファイル内のインクルードが見つからないためです。

uClibc をビルドするには、uClibc フォルダーから使用します。

uClibc ビルドですべてのカーネル ヘッダー ファイルを検出するにはどうすればよいですか?