問題タブ [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.
c++ - C++: OpenWRT ディストリビューションへの ifstream getline の問題のクロスコンパイル
カスタマイズした OpenWRT ディストリビューション内で単純な C++ コードをコンパイルしようとしていますが、getline命令でエラーが発生しました。
ここに私のコードのスナップショットがあります:
この種の警告が表示されます (-Werror フラグを付けてコンパイルしています)
何が問題なのか理解できません。
私の OpenWRT ディストリビューションでは、gcc 5.xとuClibc-0.9.33.2を使用しています。
どんな助けでも大歓迎です。ありがとう!
linux - パッケージ開発のために Buildroot パッケージのソースを変更するには?
uclibcを使用してツールチェーンを構築するためにbuildrootを使用しています。ここで、buildrootはすべてのパッケージをダウンロードし、それらを抽出してすべてビルドします。
ツールチェーンのuclibcソースを変更してから、ツールチェーンを新しいソースで再コンパイルしたいのですが、どうすればきれいな方法で実行できるのか理解できません..
ビルドが完了すると、抽出されたすべてのソースが " <buildroot-src>/output/build " にあります。ただし、buildroot はビルド時にこのディレクトリを中間としてのみ使用するため、それらを変更しても意味がありません。
だから私の考えは、おそらくuclibcパッケージの .mk ファイルを変更して、それをダウンロードして抽出する代わりに、変更したソースを使用するようにすることでした (そこで実行できるかどうかはまだわかりません) が、それは少し醜い解決策のようです..
だから私の質問はこれです: buildroot に既存のソースを使用してパッケージをビルドするように指示するより良い方法はありますか?
linux - exit() 中の uClibc 共有ライブラリのアンロード
初期化中にワーカー スレッドを作成する共有ライブラリを使用しています。アプリは uClibc と連携しています。__pthread_cond_wait()
main() から戻ると、共有ライブラリが cleanup() コードから適切に停止しないワーカー スレッドでクラッシュするか、同様のエラーが発生します。クラッシュ時の main() スレッド スタックは次のとおりです。
共有ライブラリのソースがないため、ワーカーのクリーンアップ コードを修正できませんが、私の質問は次のとおりです。
uClibc が共有ライブラリのアンロードを開始すると、スレッドがまだ実行 (クラッシュ) するのはなぜですか? _dl_munmap
上記のスタックエントリからそれらをアンロードしていると思います。main() が終了したときにすべてのスレッドが一時停止/停止されていることを確認する方法はありますか?
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 ビルドですべてのカーネル ヘッダー ファイルを検出するにはどうすればよいですか?