問題タブ [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.
linux - 非プライマリlibc(つまり、eglibc、uClibc)を使用したコンパイル
私は組み込み環境で働いています。ARMアーキテクチャ用のクロスコンパイラをeglibc
プライマリライブラリとして使用しています(つまり、デフォルトlibc
はツールチェーンに付属しています)。ここで、いくつかのアプリケーションをにリンクさせたいと思いますuClibc
。そこでuClibc
、そのツールチェーンを使用してコンパイルしました。アプリケーションをコンパイルしてリンクしようとしているuClibc
ときに、エラーが発生しました。ツールチェーンのデフォルトライブラリにリンクされています。同じマシン上に2つの異なるlibc(libc、uClibcなど)を置くことは可能だと思います。
ネットで検索して、以下が付属しました
-
それが示唆したように、私は次のことをしました
この場合、デフォルト
libc.so.6
のeglibc
-
上記のリンクが示唆しているように、私は次のことも試しました:
この場合も、デフォルト
libc.so.6
のeglibc
どこが間違っているのですか?私は本当にこれで立ち往生しています。誰かが光を当ててくれませんか?
embedded - uClibc に対してコンパイルされた BusyBox アプレットを実行すると、「不明なエラー 2」が発生する
SuperH プロセッサ ボード用の組み込み Linux を作成しようとしています。uClibc で Buildroot 2012.2 ツールチェーンを使用しています。
すべて正常にコンパイルされますが、いくつかの BusyBox アプレット (たとえば、'ls' または 'mount') を実行しようとすると、次のようなエラーが発生します。
特に「ls」の場合、このエラー number-of-files-in-folder 回を書き込みます。
これを引き起こしている可能性のあるアイデアはありますか?インターネット上の誰も同じ問題を抱えているようには見えず、運が悪いので数日間構成をクロールしています。
このエラーは uClibc の設定ミスが原因である可能性があると思いますが、それは私の推測です。
ありがとう。
編集: uClibc でいくつかのエラー メッセージ オプションを有効にしましたが、「そのようなファイルやディレクトリはありません」というエラーが表示されます。
gcc - arm-angstrom-linux-gnueabi-gcc リンカが uclibc とのリンクに失敗する
オングストローム Linux 用のアプリケーションを構築しようとしています (私の場合は、libstdc++ の代わりに uclibc を使用します)。私はbitbakeとopenembeddedを使用しています。-muclibc
シンプルなツールチェーンを使用すると、フラグを追加するだけでビルドを成功させることができます。bitbake を使用すると、ビルド コマンドは次のようになります。
どこ-muclibc mainThread.cpp lib.cpp -lportaudio
が私によって行われます。ポートオーディオ ( -lportaudio
) は正常にリンクされました。Uclibc (私が思うに) はリンクできません。次のエラーが表示されます。
ありがとう
linux - bitbake を使用して uclibc でパッケージをビルドする方法 - uclibc をビルドしようとすると Bitbake で MultipleMatches 例外が発生する
bitbake を使用してアーキテクチャuclibc
用にビルドしようとしていますが、次の出力が得られますarm7a
特定のレシピを作成しようとしていますが (間違っていますか?)、
ありがとう
compilation - uCLibc を使用して valgrind をコンパイルする
私はプロジェクトに取り組んでおり、uClibcを使用してvalgrindをコンパイルしたいと考えています。続行する方法について誰かが私に何か提案できますか?
私は fedora と i386 プラットフォームを使用しています。ターゲット プラットフォームも現時点では i386 であり、後で MIPS で動作します。
ありがとう
configuration - uclibc を使用してコンパイルする方法は?
こんにちは、buildroot ツールチェーンをインストールし、uClibc ベースの chroot で実行される単純な「Hello World」プログラムをコンパイルできます。ただし、./configure を使用するプログラムの場合、システムに存在する glibc ベースのツールチェーンではなく、uclibc ベースのツールチェーンを使用するように要求する方法について混乱しています。私の OS は Fedora で、i386 ベースのマシンです。同じプラットフォーム用に uClibc を使用してプログラムをコンパイルしたいと考えています。
gcc - ARM gentoo crossdev と uclibc: EABI ではなく OABI が必要
crossdev での ARM + GCC + UCLIBC リンクの問題を解決できる人はいますか?
Gentoo フォーラムにも投稿されています: http://forums.gentoo.org/viewtopic-t-925012.html
最近、古い GCC と OABI を使用して開発された実行可能ファイルを含むプロジェクトに割り当てられました。参考までに、システム上で正常に動作する実行可能ファイルの readelf からのヘッダー出力を次に示します。
crossdev と最新の gcc/binutils/linux-headers/etc を使用してクロスコンパイラを作成しました。そしてEABIと。
私は非常に喜んで、そのクロス コンパイラを使用してローカル フォルダーに実行可能ファイルを追加し始めましたが、後でハードウェアで実行可能ファイルを試してみたところ、最終的にセグメンテーション エラーが発生したことがわかりました。私は、かなりのグーグル検索を介してのみ、uclibc 用の古いレガシー ABI である OABI が本当に必要であることに気付きました。私の以前のクロスコンパイラは 2005 年頃のものでした。
別の参考として、eabi を使用した私の実行可能ファイルは、readelf から次のようなヘッダーを生成していました。
マシンは同じですが、セグメンテーション違反により、ターゲットでバイナリを実行する方法が提供されません。
さらにグーグルで調べたところ、レガシーシステム用の eabi コンパイラを使用してコードを生成する方法がある可能性があることがわかりました。このコマンドを実行したとき、私はとても幸せでした:
そして、私は次のようになりました:
この時点で、私は不安になり、-mabi=apcs-gnu で実行可能ファイルを作成しようと決めました。
そして、リンカーエラーが発生します:
質問: これにより、EABI が正しくなく、OABI が必要であると考えるようになりました。そうですか?
私はそれが事実だと信じていたので、crossdev を通じて uclibc を調べ始めました。
なんらかのオブジェクト バイナリにコンパイルされるファイルが正しい elf ヘッダーを持っていることを報告できることをうれしく思います。だから私はこれが私が欲しいものだと思います。
しかし、これは uclibc のコンパイル中に次のように停止します。
エラーを適切に分解した場合、私はそれを信じています
1) アーム Makefile.arch は __aeabi_unwind_cpp_pr0 を正しくビルドしていません。これは、ファイルが EABI が設定されている場合にのみビルドされるためです。
このエラーの修正は次のとおりだと思います。
2) gcc のソフト フロートがリンカによって適切にインクルードされていません。現時点では、その理由をはっきりとは言えません。
そこで、GCC にソフト フロート用のビルドを強制し、後で uclibc のビルド内でリンクされるようにしました。
次に、コンパイル用のログで -msoft-float と -mfloat-abi=soft が使用されているかどうかを確認しました。
しかし、 --with-float=soft がconfig.log内に設定されていることに注意してください。そのため、フロートが生成されているはずだと思います。
そして、gcc のコンパイル オプションの -D__GCC_FLOAT_NOT_NEEDED に注意してください。
GCC で回帰を実行して、ブレークが発生した場所を確認しました。
- gcc 4.x は ulibc では機能しません。-- 4.4.4-r2 以降、ulibc は gcc とのリンクに失敗します -- 4.4.4 より前では、gcc は表示されません
- gcc-3.4.6-r2 は、USE=-nptl が使用されている場合に機能します
参考までに、以下を実行しました: binutils: 2.22-r1 Linux Header: 3.3, 3.4 uclibc: 0.9.33.2 gcc: 3.2.3-r4, 3.3.6-r1, 3.4.6-r2, 4.1.4-r1, 4.3.3 -r2、4.4.2、4.4.4-r2、4.4.5、4.4.6-r1、4.4.7、4.5.3-r2、4.6.0、4.6.1-r1、4.6.2、4.6.3
rest - uCLib の RESTful クライアント API
uClibc を使用して組み込み環境に RESTfull クライアントを実装する必要があります。
µClibc のみに依存できる C 言語で RESTful クライアントを実装するオープン ソース ライブラリはありますか?
php - UCLIBC を使用して PHP をクロスコンパイルする
これは再投稿です。前の投稿は閉じられ、SERVERFAULT に移動され、再び閉じられました。この投稿は有効なスタックオーバーフローの問題だと思います。なぜなら、automake/compile/linking エラーが原因だと思うからです。これは、サーバー管理の問題ではなく、プログラミングの問題です。
https://serverfault.com/questions/418521/cross-compile-php
投稿の開始
PHP 5.4.0 ソースをダウンロードして展開し、ソース フォルダーに移動しました。
私は次のように構成します:
に続く
エラーはありません。すべて正常に動作します。次に、make install を行います。
繰り返しますが、すべて正常に動作します。ターゲット プラットフォームに移動して実行します
Web サーバーと直接 php で簡単なホームページをテストします。
期待どおりに動作します。次にテストします。
いやいや〜
別のスクリプトをテストします。
同じ結果:
私はphp.iniを持っていますか?
はい、無効な機能はありません。strace のテスト /usr/arm/www/bin/php index.php
ファイル info.txt が存在し、読み取り/書き込みの許可を得ています。
strace のテスト /usr/arm/www/bin/php shell.php
gdbを介してindex.phpを実行すると、次のようになります。
gdb は shell.php からこれを提供します プログラムの開始: /usr/arm/www/bin/php shell.php
zend.h は /usr/arm/www/include/php/Zend/ にあります。明らかに、クロス コンパイル中に問題が発生しました。私は何を逃したのですか?これを修正するためのconfigureフラグが見つからず、目的の場所へのシンボリックリンクを作成するとgdb出力が削除されますが、phpはまだsegfaultsします。
助けてくれてありがとう!
アップデート:
Update2
memcheck を使用して valgrind を再実行すると、以前とほぼ同じ出力が得られましたが、これは新しいものでした:
Update3
valgrind には失敗しましたが、gdb を続行し、ターゲット システムにフォルダー /home/maiden/..etc を作成し、php/include フォルダーの内容をコピーして gdb を再実行しました。今、私はこのエラーメッセージを受け取ります:
これは、sixeightzero が昨日コメントに書いたことと非常によく似ています。PHPバージョン5.3.5、5.4.0、5.4.5のすべてで同じエラーを試しました。
アップデート4
glibc 用の新しいツールチェーンをダウンロードし、新しい busybox を glibc でクロスコンパイルし、chroot ジェイルを作成し、php を uclibc の代わりに glibc でクロスコンパイルし、自分の uclibc ボックスの chroot ジェイル内でテストしました。しかし、私はまだphpを私のulibc環境で動作させる必要があります....