問題タブ [gcc]

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.

0 投票する
2 に答える
5215 参照

c - 64ビットレジスタの下位32ビットをBSWAPする方法は?

64ビットレジスタの下位32ビットサブレジスタにBSWAPを使用する方法の答えを探していました。たとえば、 RAXレジスタ内にあり、単一の命令で0x0123456789abcdef変更したい(パフォーマンスのため)。0x01234567efcdab89

だから私は次のインライン関数を試しました:

その結果は でした0x00000000efcdab89。コンパイラがこのように動作する理由がわかりません。誰かが効率的な解決策を知っていますか?

0 投票する
11 に答える
20191 参照

windows - GCC-Windows が cygwin に依存するのはなぜですか?

私は C++ 開発者ではありませんが、常にコンパイラに興味があり、GCC の一部 (特に LLVM) をいじることに興味があります。

Windows では、GCC を正しく実行するには POSIX エミュレーション レイヤー (cygwin または MinGW) が必要です。

何故ですか?

私は、C++ で記述され、さまざまなプラットフォーム (Subversion、Firefox、Apache、MySQL) 用にクロスコンパイルされた他の多くのソフトウェアを使用していますが、いずれも cygwin や MinGW を必要としません。

C++ のベスト プラクティス プログラミングに関する私の理解では、プラットフォームに中立なコードを適度に記述し、コンパイル プロセス中にすべての違いに対処できるということです。

では、GCC との契約はどうなるでしょうか。Windows でネイティブに実行できないのはなぜですか?


編集:

さて、これまでの2つの回答は、基本的に「GCCはposixヘッダーを使用するため、posixレイヤーを使用します」と言っています。

しかし、それは実際には質問に答えません。

お気に入りの標準ライブラリ用の一連のヘッダーが既にあるとしましょう。なぜまだ posix ヘッダーが必要なのですか?

GCC は、実際にRUNするために cygwin/mingw を必要としますか?

それとも、ヘッダーとライブラリのエミュレーション レイヤーだけが必要ですか? もしそうなら、必要なリソースを含む「lib」ディレクトリを与えることができないのはなぜですか?


もう一度編集:

わかりました、私は質問を明確にするためにもう一度試みます...

また、D プログラミング言語でコードを書きます。公式のコンパイラは「dmd」という名前で、Windows と Linux の両方に公式のコンパイラ バイナリがあります。

Windows バージョンでは、POSIX エミュレーションは一切必要ありません。また、Linux バージョンでは、Win32 エミュレーションは一切必要ありません。コンパイラがその環境に関する仮定を持っている場合、コンパイラはそれらの仮定をかなりうまく隠します。

もちろん、標準ライブラリの場所と、静的または動的にリンクするライブラリの場所をコンパイラに指示する必要があります。

対照的に、GCC は posix 環境で動作しているふりをすることを主張し、エミュレーション レイヤーをセットアップすることによって、これらの仮定をユーモアを交えて表現するように ME に要求します。

しかし、正確には、GCC 内でその層に依存しているものは何でしょうか? stdlib ヘッダーを探しているだけで、「/usr/lib」内にそれらのヘッダーが見つかると想定していますか?

その場合、「C:/gcc/lib」を調べてそれらのヘッダー ファイルを見つけるように指示することはできませんか?

それとも、GCC 自体が POSIX ライブラリに依存してファイル システムにアクセスする (およびその他の低レベルの操作を行う) のでしょうか。そうであれば、お気に入りの Windows POSIX ライブラリに静的にリンクしないのはなぜだろうか。ユーザーが依存関係をアプリケーションに直接組み込むことができるのに、なぜユーザーが依存関係をセットアップする必要があるのでしょうか?

0 投票する
4 に答える
10192 参照

c++ - バイナリの GCC コンパイル時フラグを検出する

特定のバイナリがコンパイルされた gcc フラグを調べる方法はありますか?

0 投票する
3 に答える
1535 参照

c++ - サブクラスからの保護されたメンバーへのアクセス: gcc と msvc

ビジュアル C++ では、次のようなことができます。

これを g++ でコンパイルしようとすると、エラーが発生します。私はこれをしなければなりません:

標準 C++ で前者を実行することは想定されていませんか? または、gcc で何かが誤って構成されており、エラーが発生していますか?

0 投票する
4 に答える
1862 参照

linux - Linuxでの共有ライブラリの問題

Linuxシステムで非常に古いソフトウェアをコンパイル/リンクしようとしていますが、何らかの理由で、システムにインストールされている共有ライブラリにリンクできません。

リンカから次のエラーが発生します。

ただし、lib自体はインストールされています。私が走ったら

私は(とりわけ)このヒットを取得します:

ライブラリとそのライブラリへのリンクは/usr/libbtwにあります。特別なことは何もありません。

したがって、ライブラリがそこにあり、ldconfigがそれを見つけます。リンク時にldがライブラリを見つけられない原因は何ですか?ご想像のとおり、私は共有ライブラリに慣れていません。

何か案は?

0 投票する
4 に答える
90479 参照

c++ - C コードで C++ ライブラリを使用する

データを管理するためのさまざまなクラスを提供する C++ ライブラリがあります。ライブラリのソースコードがあります。

ライブラリを C コードと C++ コードで同時に使用できるように、C 関数呼び出しをサポートするように C++ API を拡張したいと考えています。

私は GNU ツール チェーン (gcc、glibc など) を使用しているため、言語とアーキテクチャのサポートは問題になりません。

これが技術的に不可能な理由はありますか?

注意する必要がある落とし穴はありますか?

これに関して利用可能なリソース、サンプルコード、および/またはドキュメントはありますか?


私が見つけた他のいくつかのこと:

  1. 以下を使用して、C コードで使用する必要がある C++ ヘッダーをラップします。

  1. Cに含まれていない別のヘッダーファイルに「実際の」C++インターフェイスを保持します。ここでPIMPLの原則を考えてください。ここで何かを使用#ifndef __cplusplus #errorすると、狂気を検出するのに役立ちます。
  2. C コード内の名前としての C++ 識別子に注意する
  3. C コンパイラと C++ コンパイラの間でサイズが異なる列挙型。GNU ツール チェーンを使用している場合はおそらく問題にはなりませんが、注意が必要です。
  4. 構造体については、C が混乱しないように次の形式に従います。

    /li>
  5. 次に、C++ オブジェクトを渡すためにポインターを使用します。C では、X が C++ オブジェクトである struct X として宣言するだけです。

これはすべて、C++ の達人である友人の厚意によるものです。

0 投票する
3 に答える
95275 参照

assembly - gcc を使用して Intel 構文でアセンブリ コードを生成するにはどうすればよいですか?

このgcc -Sオプションは AT&T 構文でアセンブリ コードを生成しますが、Intel 構文でファイルを生成する方法はありますか? または、2つの間で変換する方法はありますか?

0 投票する
4 に答える
32403 参照

c++ - リンク上の未定義のシンボル___gxx_personality_v0

私はこのコマンドラインでこの未定義のシンボルを構築しています:

test.cppは単純で、正常にビルドされるはずです。契約は何ですか?

0 投票する
3 に答える
19290 参照

c++ - libNAME.so 命名規則に従っていないライブラリのパスをハードコーディングせずに -l を使用せずに GCC を使用してリンクするにはどうすればよいですか?

GCC を使用して実行可能ファイルをリンクしたい共有ライブラリがあります。共有ライブラリには、libNAME.so の形式ではない非標準の名前が付いているため、通常の -l オプションを使用できません。(たまたま Python 拡張機能でもあるため、'lib' プレフィックスはありません。)

ライブラリ ファイルへのパスをリンク コマンド ラインに直接渡すことはできますが、これにより、ライブラリ パスが実行可能ファイルにハードコードされます。

例えば:

パスを実行可能ファイルにハードコーディングせずに、このライブラリにリンクする方法はありますか?

0 投票する
2 に答える
997 参照

gcc - gccリンカーの問題

私はlibpurpleをラップするライブラリを作成しようとしています(ここで役立つようにlibpurpleについて何も知る必要はありません)。次に、Libpurpleは、dlopenなどを介してアクセスされる「プラグイン」をロードします。これらのプラグインは、libpurpleの関数を呼び出します。

ライブラリは問題なくビルドできますが、適切なlibpurple init関数を呼び出し、libpurpleがプラグインを読み込もうとすると、次のようなエラーが発生します。

シンボルルックアップエラー:/usr/local/lib/purple-2/autoaccept.so:未定義のシンボル:purple_user_dir

Purple_user_dirは、libpurpleで定義された関数です。libpurpleにリンクするプログラム(ライブラリではない)を作成する場合、問題はありません。-export-dynamicを使用してみましたが、役に立たなかったようです。これが私のビルドコマンドです:

ありがとう。