タグ付けされた質問 「glibc」

8
glibcのstrlenをすばやく実行するには、なぜ複雑にする必要があるのですか?
ここでstrlenコードを調べていて、コードで使用されている最適化が本当に必要かどうか疑問に思っていましたか?たとえば、次のようなものが同等以上に機能しないのはなぜですか? unsigned long strlen(char s[]) { unsigned long i; for (i = 0; s[i] != '\0'; i++) continue; return i; } より単純なコードは、コンパイラーが最適化するのに優れていたり、簡単だったりしませんか? strlenリンクの背後にあるページのコードは次のようになります。 /* Copyright (C) 1991, 1993, 1997, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Torbjorn Granlund (tege@sics.se), with …

11
単一のホスト上の複数のglibcライブラリ
単一のホスト上の複数のglibcライブラリ 私のLinux(SLES-8)サーバーには現在glibc-2.2.5-235がありますが、このバージョンでは動作せず、glibc-2.3.3が必要なプログラムがあります。 同じホストに複数のglibcs​​をインストールすることは可能ですか? これは、古いglibcでプログラムを実行すると発生するエラーです。 ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./myapp) ./myapp: /lib/i686/libpthread.so.0: version `GLIBC_2.3.2' not found (required by ./myapp) ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libxerces-c.so.27) ./myapp: /lib/ld-linux.so.2: version `GLIBC_2.3' not found (required by ./libstdc++.so.6) ./myapp: /lib/i686/libc.so.6: version `GLIBC_2.3' not found (required by ./libstdc++.so.6) そこで、newglibcという新しいディレクトリを作成し、次のファイルをコピーしました。 …
171 linux  gcc  glibc 

4
特定のglibcバージョンにリンクするにはどうすればよいですか?
Ubuntu Lucid 10.04 PCで何かをコンパイルすると、glibcにリンクされます。Lucidはglibcの2.11を使用します。古いglibcがインストールされている別のPCでこのバイナリを実行すると、glibc 2.11がないとコマンドが失敗します... 私の知る限り、glibcはシンボルのバージョン管理を使用しています。gccに特定のシンボルバージョンを強制的にリンクさせることはできますか? 具体的には、ARM用のgccクロスツールチェーンをコンパイルしてみます。
110 linux  gcc  linker  glibc  libc 

4
CコードでのC ++ライブラリの使用
データを管理するためのさまざまなクラスを提供するC ++ライブラリがあります。ライブラリのソースコードがあります。 ライブラリをCコードとC ++コードで同時に使用できるように、C ++ APIを拡張してC関数呼び出しをサポートする必要があります。 私はGNUツールチェーン(gcc、glibcなど)を使用しているため、言語とアーキテクチャのサポートは問題になりません。 これが技術的に不可能である理由はありますか? 注意が必要な落とし穴はありますか? これに関して利用可能なリソース、コード例、ドキュメントはありますか? 私が見つけた他のいくつかのこと: 以下を使用して、Cコードで使用する必要があるC ++ヘッダーをラップします。 #ifdef __cplusplus extern "C" { #endif // // Code goes here ... // #ifdef __cplusplus } // extern "C" #endif 「実際の」C ++インターフェースは、Cには含まれていない個別のヘッダーファイルに保存します。ここではPIMPLの原則を考えます。#ifndef __cplusplus #errorものを使用すると、狂気を検出するのに役立ちます。 Cコードの名前としてのC ++識別子の注意 CおよびC ++コンパイラ間でサイズが異なる列挙型。GNUツールチェーンを使用している場合はおそらく問題ではありませんが、それでも注意してください。 Cが混乱しないように、構造体については次の形式に従ってください。 typedef struct X { ... } X 次に、C …
102 c++  c  gcc  glibc 

2
`fcntl64`の代わりに古いlibc` fcntl`へのリンクを強制する方法は?
そうです(2018年8月発売)GLIBC 2.28は fcntlのにかなり積極的な変更を行いました。定義が変更され<fcntl.h>、外部関数ではなくなりました。なく、#definefcntl64。 その結果、このglibcを使用するシステムでコードをコンパイルした場合、つまりfcntl()を使用した場合、結果のバイナリは2018年8月より前のシステムでは実行されません。これは、さまざまなアプリケーションに影響します。 .fcntl()のマニュアルページは、サブ関数の小さなユニバースのエントリポイントであることを示しています。 https://linux.die.net/man/2/fcntl 必要なGLIBC関数の特定のバージョンをリンカーに伝えることができれば、すばらしいでしょう。しかし、私が見つけた最も近いものは、別の投稿への回答で説明されているこのトリックでした: 「.soファイル内の古いシンボルバージョンに対するリンク」への回答 これはもう少し複雑です。 va_listを取るa fcntlなしの可変vffcntl個です。このような状況では、可変個関数の呼び出しを転送できません。:-( 意図的に低い依存関係を持つ安定したコードがある場合、それを現在のUbuntuでビルドするのは失望です...そして、実行可能ファイルを1年前にリリースされた別のUbuntuで実行することを拒否します(ほぼその日まで)。これにはどのような手段がありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.