問題タブ [g++]

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 に答える
982 参照

objective-c - Linux ガベージ コレクション上の Objective-C はありますか?

Objective-C v2.0 (Mac が使用するもの) には、ガベージ コレクションという新機能が追加されました。私はLinux PCの子供です(不思議に思っている場合はUbuntu)。私の質問は、gcc/g++ コンパイラの使用は Objective-C ガベージ コレクションですか?

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

c++ - g++ ヘッダーが含まれています: まだ定義が見つかりません

こんばんは :)

私はg ++とメイクファイルをいじっています。私はこの点に到達しました:

foo.h:

Foo.h は最終的にメインの cpp ファイルに含まれるので、start/stop を呼び出して動作を設定できます。

それから bar.h があります:


ただし、g ++は気に入らないようです:

私はmakefileを使用しており、次のような組み合わせを試しました:

ここに bar.h を追加する必要はないと思いますが、foo.h に含めるだけで十分ではないでしょうか?

明確にするために、これは大まかに現在設定されている方法です(はい、これはより効率的な方法で実行できることを知っています):

どうしたの?g ++について欠けているものであり、ヘッダーインクルードの処理方法が含まれていると思います。正しい方向に向けてください!

編集 - 解決策を見つけました:

どっ!私は今、ばかげていると感じています。boost::asio をいじっていましたが、これをヘッダーのどこかに残していたことを忘れていました: using boost::asio::ip::tcp;

boost::asio::ip::tcp::bar 関数があるとしましょう:D

ああ、とにかくありがとう!

0 投票する
1 に答える
7813 参照

c++ - boost::asio::ip::tcp::resolver::resolve() は永久にブロックします

boost.asio の例にあるこのコードに似たものを作成しようとしています。

ソケット.h:

ソケット.cpp:

g++ はこれをエラーなしでビルドしますが、コードが resolver.resolve() 呼び出しを通過することはありません。
ホストには「127.0.0.1」と「localhost」、ポートには「80」の両方を試しました。(問題ではないと思いますが、apache2 は稼働しています)

アプリケーションからctrl + cを押すと、明らかに終了しますが、終了する直前に「文字列に接続しています」と出力されます。

私は自分で例を作成し、同じ問題が発生するかどうかを確認することを計画しており、間違いなくここに結果を投稿します. 誰かがこの問題に遭遇したか、またはこの動作の原因を知っていますか?

編集:
この例は問題なく実行されます...デバッグを行う必要があると思います。

2番目の編集:
わかりません。異なる可能性があるのは、ホスト/ポートだけです。
例では char* argv[] を使用しており、私は以下を使用しています:

3番目の編集:
確かに接続時にブロックされているようで、fflush(stdout)を忘れていました。それならソケットに問題があるはずです。さらにテストを行う予定です。

4番目の編集:
ばかげて、まったくブロックされていませんでした!私はコンソール出力に頼りすぎていました..

0 投票する
1 に答える
220 参照

g++ - 誰かがg++3.4.2とg++4.1.2のこのリンカーの違いを説明できますか?

あるプラットフォームから別のプラットフォームにコードを移動したところ、コンパイラのバージョンを変更する必要がありました。ユーティリティソースのうちの2つは、未定義のシンボルとのリンクの問題を引き起こしました。この例では、それらをFoo.cおよびFoo.hと呼びます。

すべてがコンパイルされ、g ++ 3.4.2で正常にリンクされていたので、g++4.1.2への切り替えは簡単だと思いました。4.1.2を使用すると、コンパイルは正常に行われましたが、シンボルが定義されていないためにリンクが失敗しました。他のソースファイルで使用されたFooのすべての関数のシンボル。Foo.hがBar.cに含まれていても、Bar.cは未定義でした。

問題は、Foo.cファイルにFoo.hが含まれていないことでした。だから問題は、4.1.2ができなかったときにg ++3.4.2がこのコードをどのようにリンクしたのかということです。3.4.2は.hファイルを予期していて、この問題を回避するために「魔法のように」それを含めていたと思います。しかし、誰かがより良い説明を持っていますか?

0 投票する
6 に答える
213810 参照

c - 可変個引数マクロの作り方(引数の数が可変)

特定の数ではなく、任意の数のパラメーターを受け入れるマクロを C で作成したい

例:

X任意の数のパラメータ

whateverオーバーロードされており、2 つまたは 4 つのパラメーターで呼び出すことができるため、これが必要です。

マクロを 2 回定義しようとしましたが、2 回目の定義で最初の定義が上書きされました。

私が使用しているコンパイラは g++ (具体的には mingw) です。

0 投票する
1 に答える
355 参照

c++ - 特定のコードで g++ が -mregparm を無視するようにするにはどうすればよいですか?

背景:

個人的なプロジェクトとして、C++ でカーネルを開発しています。順調に進んでいます。実際、私はカーネル ランドで利用可能な多くの C++ を非常によくサポートしています (libc と libstdc++ のほぼ全体を実装しました)。

より困難でコンパイラ固有のものの 1 つは、RTTI と例外のサポートです。今のところ、例外を完全に無効にしていますが、RTTI などはdynamic_cast非常に便利なので、RTTI が必要です。これを機能させるために、g++ が期待するものと一致する std::type_info の基本的な実装を用意してから、g++ のlibsupc++.aandにリンクしlibgcc_eh.aます。これはうまくいきます。RTTI はチャンピオンのように機能します。

質問:

私はいくつかの最適化オプションをいじっていましたが、いつか -mregparm をコンパイル時の選択肢として使用したいと考えています。明らかに、これはカーネルであり、アセンブリ コードと対話する必要があります。スタックにパラメーターがない場合、適切に機能しない特定の関数があります。これを解決するために、次のマクロを使用します。

繰り返しますが、これは非常にうまく機能します。問題は、dynamic_cast. コンパイルは、いくつかの暗黙的に定義された内部関数 (前述のサポート ライブラリで定義されている) への呼び出しを発行し、-mregparm フラグを考慮して行います。もちろん、私はシステムのサポート ライブラリにリンクしているので、互換性のある呼び出し規約がある場合とない場合があります (私の場合はありません)。これらの関数は暗黙的 (どのファイルにもプロトタイプがない) であり、長くて壊れた名前を持っているため、asmlinkage 属性をそれらに追加することは (ほぼ) 不可能です。

頭に浮かぶ3つの可能な解決策があります。

  1. -mregparm を一緒にサポートすることを忘れてください。
  2. これら 2 つのサポート ライブラリをカーネルと同じフラグで再コンパイルします。これは煩わしく、少し非現実的かもしれません (gcc ビルドからきれいに分離できるかどうかはわかりませんし、ツールチェーンのアップグレードは非常に苦痛になる可能性があります) が、うまくいくはずです。
  3. 特定の .a/.o ファイルにあるコードを呼び出すときに、何らかの方法でコンパイラが -mregparm を無視するようにします。

オプション3は可能ですか?私の直感はノーですが、ここにはいくつかのg ++​​の専門家がいるので、私は尋ねると思いました:-)。

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

c++ - 一時オブジェクトのメソッドを呼び出しても安全ですか?

char* を返す関数があります。いくつかの文字列を連結する必要があるため、次の行を書きました。

使用したい文字列に名前を付けるという質問を避けることができることを知っています。より一般的な質問をする機会を得たいだけです: 一時変数のメソッドを呼び出すのは安全ですか? 規格に準拠していますか?

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

c++ - コンストラクターの定義と宣言の不一致

次の C++ コードがありました。宣言内のコンストラクターへの引数は、コンストラクターの定義とは異なる constness を持っていました。

g++ を使用して警告なしでこれをコンパイルすることができました。64 ビットの solaris に組み込まれている C++ コンパイラでリンカー エラーが発生したことが判明しました。これにより、問題があることに気付きました。

この場合、一致する引数のルールは何ですか? それはコンパイラ次第ですか?

0 投票する
6 に答える
2462 参照

c++ - WindowsからPS3でCellLinux用にクロスコンパイルする方法は?

cygwinツールチェーンを使用してWindowsPCでCellLinuxプログラムをコンパイルできるようにするには、クロスコンパイルのセットアップをどのように実現できますか?cygwinツールは、クロスコンパイラのビルドに使用するGNUコンパイラと、ビルドプロセスに関連するツール(rpm、cpio、make、flex、bisonなど)を提供します。

私はこれが可能であると適度に確信していますが、実際にこれを行った人は誰も知りません。これはx86Linuxですでに行われていますが、2番目のオペレーティングシステム全体を実行している仮想マシンの使用とオーバーヘッドを必要とせずに、Windowsを使用したいと思います。

Cell Linuxツールチェーンはパッチが適用されたGNUツールチェーンであり、PPUおよびSPUプロセッサ用のCおよびC ++コンパイラ、および関連するbinutilsを備えています。CellLinux用のCellLinuxSDKのソースは、ここにあります。ここでのソースRPMSには、Linuxのrpmbuildツールで使用するためのビルドスクリプトがあります。

具体的な質問は、PPUおよびSPUプロセッサ用のCell Linux GNUコンパイラのセットを、Cygwinを使用してWindows上でどのように構築できるかということです。

0 投票する
13 に答える
506 参照

c++ - バイナリで使用されていないものを含めたりリンクしたりすると、どのような悪影響がありますか?

作成しているバイナリがあり、実際には使用されないファイルの束をインクルードし、それらのインクルードファイルによって記述されたライブラリへの後続のリンクを実行するとしますか?(繰り返しますが、これらのライブラリは使用されません)

コンパイル時間の増加を超えて、これの悪影響は何ですか?