問題タブ [libc]
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.
glibc - Gentoo に glibc 2.3.2 をインストールするには?
アプリケーションを作成し、Gentoo で実行する必要がありますが、実行しようとすると、次のメッセージが表示されます。
/lib/libc.so.6: バージョン `GLIBC_2.3.4' が見つかりません (/usr/local/myapp/lib/myapplib.so.1 で必要)
このgentooの現在のGLIBCバージョンは2.3.2です。
権限がないため、この glibc を更新できません。そのため、glibc を同じバージョン (2.3.2) に「ダウングレード」する必要があります ... どうすればよいですか?
わかりました、
c - container_of が glibc にないのはなぜですか?
libc/glibc で container_of() が受け入れられない可能性がある技術的な理由はありますか?
ありがとう、チェンツ
native - ネイティブ プログラムを直接実行すると正常に動作するのに、コンドル経由で送信するとセグ フォールトで失敗するのはなぜですか?
シミュレーションに取り込もうとしているサードパーティのライブラリがあります。静的ライブラリ (.a) と、そのすべてのランタイム依存関係 (共有オブジェクト) があります。ライブラリにリンクされた非常に単純なアプリケーション (C 言語) を作成しました。サードパーティ ライブラリの API の一部である初期化関数を呼び出して終了するだけです。これをコマンドラインから直接実行すると、正常に動作します。実行可能ファイルをコンドル グリッドに送信すると、strncpy (libc.so.6) でセグ フォールトが発生して失敗します。特定のマシンでのみ実行可能ファイルを実行するようにコンドルを強制しました。そのマシンで直接実行すると、問題なく動作します。
私は主に Java プログラマーです... ネイティブ コーディングの経験は限られています。私は、nm、ldd、catchsegv などのツールに精通しており、それらを実行できるようになっています。しかし、どこから問題を探し始めたらよいかわかりません。
ldd を実行中のマシンで直接実行し、condor から送信されたスクリプトを介して実行可能ファイルと共に実行しました。ldd は、どちらの場合も同じファイルを報告します。
直接実行する方法はわかりませんが、コンドルで実行すると失敗します。プログラムを最終的に実行するプロセス、condor_startd は、root として開始し、その有効な uid をサブミッターに変更するプロセスです。もしかしてこれが何か関係あるの?
shared-libraries - どのようにLibc共有ライブラリがメモリにロードされ、プロセス間で共有されますか?
Libc共有ライブラリがメモリにロードされ、プロセス間で共有される方法を理解したいですか? メモリにロードされ、すべてのプロセス間で共有される1つのlibcインスタンスがありますか、それともプロセスごとにメモリ内の各libcインスタンスですか。libc がプロセス間でどのように共有されているかは不明です。
ありがとうアディティア
linux-kernel - 多くのシステム コール (getpid) が strace を使用して 1 回だけキャプチャされるのはなぜですか?
(システム コールの効率をテストするために) プログラムでgetpid()を何度も呼び出しましたが、トレースを取得するために使用するstrace
と、getpid()呼び出しが 1 回だけキャプチャされます。
コードは簡単です:
私はこれを使用gdb
して取得しました:
アセンブリコードがよくわかりません。また、どなたか詳しい説明をいただけると助かります。私の観察によると、最初のgetpid()呼び出しを除いて、「call *%gs:0x10」(vdso にジャンプする) は実行されません。これが、後続のgetpid()呼び出しがキャプチャされない理由である可能性があります。しかし、理由はわかりません。
Linux カーネル: 2.6.24-29 gcc (GCC) 4.2.4 libc 2.7、
ありがとう!
c - libcに新しい関数を追加する
新しいlibc関数を追加し、Cプログラムから呼び出すにはどうすればよいですか?新しい関数は、カーネルレベルのシステムコールのラッパーではありません。その機能はユーザースペースで実行されます。
gcc - libcライブラリでコンパイルする
ここで説明するコードでstricmp()を使用しました
コンパイルエラーundefined reference to
stricmp'`が発生します。
-cオプションを指定してlibcライブラリでコンパイルする方法は?
c++ - libcはどのように機能しますか?
私はMIPS32エミュレーターを作成しており、gccを使用してCプログラムをコンパイルするときに、標準Cライブラリ全体(おそらくGNU拡張機能を使用)を使用できるようにしたいと考えています。
この時点で理解しているように、I/OはMIPS32アーキテクチャ上のシステムコールによって処理されます。libc / glibcを使用してプログラムを正常に実行するには、どのsyscallをエミュレートする必要があるかをどのように判断できますか?(試行錯誤なし)
編集:システムコールの意味の例については、これを参照してください。
(興味があれば、ここでプロジェクトをチェックできます。フィードバックは大歓迎です。非常に初期の段階であることに注意してください)
glibc - glibc と「libc」のバージョンを関連付ける方法は?
realpath
私のLinuxボックスのmanページには次のように書かれています:
それはどういう意味ですか?どのlibcを参照していますか-「Linux libc」? - また、さまざまな libc フレーバーに一致するリストはどこにありますか?この関数や他の関数にリンクするための最小要件を確認できますか?
GLIBC のバージョンは 2.13 で、4.5.21 よりかなり低いですが、glibc に関するウィキペディアのページには次のように書かれています。
1990 年代初頭、Linux カーネルの開発者は glibc をフォークしました。「Linux libc」と呼ばれる彼らのフォークは、何年もの間別々に維持され、バージョン 2 から 5 がリリースされました。
... と
Linux libc の最後に使用されたバージョンは、内部名 (soname) libc.so.5 を使用していました。これに続いて、Linux の glibc 2.x は soname libc.so.6 を使用します。
これは、どの glibc もメジャー バージョンが 5 を超える「Linux libc」と同等であることを意味しますか?
これまたはそのバージョンの "libc" を参照しているマニュアル ページは他にもあるため、これらrealpath
は問題全体の 1 つの例にすぎません。
注:私が構築しているコードはLinuxに限定されていません。そのため、特定の機能が利用可能かどうかを検出する明確な方法が必要です。
c - なぜ「errno」を使用するのですか?
私はTechnionのCS学生ですが、errno
変数とcスタイルの関数呼び出しについて学びました。これは、cスタイルのシステムコールがレジスタを使用して値を返す場合、なぜ誰かが使用する必要があるのか疑問に思いerrno
ます。