問題タブ [glibc]
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 - getaddrinfo_a を使用して glibc で非同期解決を行う方法
外部ライブラリを必要としない、見落とされがちな機能ですが、基本的にドキュメントは一切ありません。
dns - glibc を使用すると、I/DHCP が DNS サーバーを変更した後に gethostbyname が失敗するのはなぜですか?
DHCPリースが取得される前にサーバー(デバイス上で実行されている)が起動した場合、ホスト名を使用して接続することはできません.
その場合、ホストは IP アドレスで検索できますが、DNS では検索できません。
curl接続が失敗したため、最初はCurl DNSキャッシュに問題があると思いました. しかし、CURLOPT_DNS_CACHE_TIMEOUTを使用してcurlがアドレスをキャッシュしないようにしましたが、接続はまだ失敗しました。
linux - 「glibc が検出されました *** free(): 無効なポインター」で強制的に中止する方法
Linux 環境で、「glibc detected *** free(): invalid pointer」エラーが発生した場合、原因となっているコード行を特定するにはどうすればよいですか?
強制的に中止する方法はありますか? これを制御するための ENV var があることを覚えていますか?
glibc エラーの gdb にブレークポイントを設定するには?
c - GLIBC: メモリリークのデバッグ: mtrace() の出力を解釈する方法
メモリ リークの問題をデバッグしようとしています。malloc/free/realloc トレースを取得するためにmtrace()を使用しています。プログラムを実行したところ、巨大なログ ファイルが作成されました。ここまでは順調ですね。しかし、ファイルの解釈に問題があります。次の行を見てください。
これに関する奇妙な点は、1 つの呼び出し (同じ戻りアドレス) が 4 つの割り当てを担当していることです。
さらに見知らぬ人:
これらの 2 行の間で、ブロック 0x2aaab43a1700 が解放されることはありません。
誰もこれを説明する方法を知っていますか? 1 回の呼び出しで 4 つの割り当てが発生するのはなぜですか? また、以前に割り当てられたアドレスを malloc で返すにはどうすればよいでしょうか。
edit 2008/09/30: GLIBC が提供する mtrace() 出力を分析するスクリプト (mtrace.pl) は、ここでは役に立ちません。それはただ言うでしょう:0x2aaab43a1700重複を割り当てます。しかし、どうしてこれが起こるのでしょうか?
c++ - C コードで C++ ライブラリを使用する
データを管理するためのさまざまなクラスを提供する C++ ライブラリがあります。ライブラリのソースコードがあります。
ライブラリを C コードと C++ コードで同時に使用できるように、C 関数呼び出しをサポートするように C++ API を拡張したいと考えています。
私は GNU ツール チェーン (gcc、glibc など) を使用しているため、言語とアーキテクチャのサポートは問題になりません。
これが技術的に不可能な理由はありますか?
注意する必要がある落とし穴はありますか?
これに関して利用可能なリソース、サンプルコード、および/またはドキュメントはありますか?
私が見つけた他のいくつかのこと:
- 以下を使用して、C コードで使用する必要がある C++ ヘッダーをラップします。
- Cに含まれていない別のヘッダーファイルに「実際の」C++インターフェイスを保持します。ここでPIMPLの原則を考えてください。ここで何かを使用
#ifndef __cplusplus #error
すると、狂気を検出するのに役立ちます。 - C コード内の名前としての C++ 識別子に注意する
- C コンパイラと C++ コンパイラの間でサイズが異なる列挙型。GNU ツール チェーンを使用している場合はおそらく問題にはなりませんが、注意が必要です。
構造体については、C が混乱しないように次の形式に従います。
/li>次に、C++ オブジェクトを渡すためにポインターを使用します。C では、X が C++ オブジェクトである struct X として宣言するだけです。
これはすべて、C++ の達人である友人の厚意によるものです。
c++ - C/C++で大文字と小文字を区別しない部分文字列検索を行う最速の方法は?
ノート
以下の質問は、2003 年の一部のコードについて 2008 年に尋ねられました。OP の更新が示すように、この投稿全体は 2008 年のビンテージ アルゴリズムによって廃止されており、歴史的な好奇心としてのみここに残っています。
C/C++ で、大文字と小文字を区別しない部分文字列検索を高速に行う必要があります。私の要件は次のとおりです。
- strstr() のように動作する必要があります (つまり、一致点へのポインターを返します)。
- 大文字と小文字を区別しない必要があります (doh)。
- 現在のロケールをサポートする必要があります。
- Windows (MSVC++ 8.0) で利用できるか、Windows に簡単に移植できる (つまり、オープン ソース ライブラリから) 必要があります。
これが私が使用している現在の実装です(GNU Cライブラリから取得):
このコードを高速化できますか、またはより良い実装を知っていますか?
注: GNU C ライブラリにの新しい実装が追加されたstrstr()
ことに気付きましたが、大文字と小文字を区別しないように簡単に変更できるかどうか、または実際に古いライブラリよりも高速であるかどうかはわかりません (私の場合)。また、古い実装がまだワイド文字列に使用されていることに気付いたので、理由を知っている人は共有してください。
アップデート
明確にするために (まだ作成していない場合に備えて)、この関数は作成していません。これは GNU C ライブラリの一部です。大文字と小文字を区別しないように変更しただけです。
strcasestr()
また、他のソース (OpenBSD、FreeBSD など) からの他の実装についてのヒントとチェックアウトに感謝します。それは行く道のようです。上記のコードは 2003 年のものです。そのため、より良いバージョンが利用可能になることを期待してここに投稿しました。:)
c++ - glibc の「-lmcheck」オプションとマルチスレッド
マルチスレッドの C++ アプリで発生するヒープ破損の問題を突き止めようとしています。1 つの手法として、アプリケーションの libraries 行に -lmcheck を追加してみました。これにより、比較的短い順序で明らかにヒープが破損してアプリがクラッシュします。
私たちのアプリは、(必要に応じて) malloc/free と new/delete の両方を使用します。
私たちのチームの 1 人は、-lmcheck が実際にスレッド セーフであるかどうか疑問に思い、すべての malloc/free 呼び出しにミューテックスを配置しました。クラッシュはなくなりました。
-lmcheck がマルチスレッドをサポートすることになっているかどうかは誰にもわかりませんか? 使用しようとしているツールを誤解しているだけで、不要な心配が生じているのではないでしょうか。
c - strerror_r にはどのサイズを許可する必要がありますか?
The Linux Standard Base Core Specification 3.1と同様に、OpenGroup POSIX.1-2001 はstrerror_rを定義しています。しかし、エラー メッセージに合理的に期待できる最大サイズへの参照が見つかりません。コードに配置できる定義がどこかにあることを期待していましたが、見つけることができるものはありません。
コードはスレッドセーフである必要があります。これが、strerror ではなく strerror_r が使用される理由です。
誰も私が使用できる記号を知っていますか? 自分で作成する必要がありますか?
例
ドキュメントから:
オープン グループ基本仕様第 6 号:
エラー
strerror_r() 関数は、次の場合に失敗する可能性があります:
- [ERANGE]生成されたメッセージ文字列を格納するには、strerrbuf および buflen によって提供されたストレージが不十分でした。
ソースから:
glibc-2.7/glibc-2.7/string/strerror.c:41:
gcc - 動的ライブラリへの静的リンク。glibc
そう。マシンに 2 つのバージョンの GCC があると問題が発生します。
3.4.6 および 4.1
これは、新しいソフトウェアのいくつかの依存関係の問題が原因です。(glibc 4.1 が必要)
この新しいソフトウェアを 4.1 ライブラリにリンクしようとすると、問題なくリンクします。ただし、ソフトウェアの実行に関しては、LD_LIBRARY_PATH で 3.4.6 を見ているため、ライブラリが見つかりません。LD_LIBRARY_PATH を 4.1 ライブラリに設定すると、3.4.6 ライブラリがそのために使用されるため、他のものを殺すとともに、シェルを爆破します。
その少しキャッチ 22。
リンク時に、LD_LIBRARY_PATH を使用せずにその共有ライブラリへの絶対パスを与える方法はありますか?
このようにして、うまくいけば両方のバージョンを使用できますが、この特定のアプリケーションには 4.1 しか使用できませんか?
c - glibc に付属する C 用の自動サイズ変更配列/動的配列の実装はありますか?
glibc または C 用の標準 Linux ライブラリに動的配列の実装はありますか? サイズを気にせずにリストに追加できるようにしたい。C++ 用の std::vector が存在することは知っていますが、同等の C が必要です。