問題タブ [g++5.1]

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 投票する
1 に答える
603 参照

c++ - g++-5.1.1 は、最適化フラグが使用されている場合にのみ、未使用の変数について警告します

大規模なプロジェクトで、リリース バージョン (最適化フラグを使用) をビルドするときのみ g++-5.1.1 からコンパイラ警告が表示されますが、デバッグ バージョン (ほとんどのコンパイラ最適化を無効にする) をビルドするときは表示されません。問題を再現するコマンドを使用して、以下にリストされている最小限の例に問題を絞り込みました。g++-4.8.4 を使用すると問題は発生しません。これは g++-5.1.1 のバグですか? それとも、このコードは正当に間違ったことを行っており、その警告を正当化していますか? コードにリストされている最後の 3 つのケースで警告が生成されないのはなぜですか (説明については、下部の編集を参照してください)。

興味のある方は、GCC の Bugzillaのバグ レポートをご覧ください。

編集: コメントで Ryan Haining が述べたように、container_2リンケージcontainer_3externあり、コンパイラはそれらの使用について警告する方法がありません。

0 投票する
0 に答える
620 参照

gcc - G++ 5.1 の `-Wctor-dtor-privacy` 警告は壊れていますか?

このctor-dtor-privacy警告は、すべてのコンストラクタとデストラクタが private である場合にトリガーされることを意図しています。

したがって、次のクラスでは、警告がトリガーされると予想されます。

ただし、clang++(バージョンclang 3.7.0 (trunk 238948)) も GCC 5.1.0 も、 を使用する場合、このコードに対して警告を発行しません-Wctor-dtor-privacy。これは疑わしいように見えますが、警告は完璧ではないため、いくつかの偽陰性が予想されると思います. (コピー コンストラクターとムーブ コンストラクターがまだ暗黙的に定義されているため、警告がトリガーされない可能性があります。そのため、技術的にすべてのコンストラクターがプライベートであるとは限りません。クラスを構築することはできません。)

ただし、このコードには警告が表示されます。

ここでtestは、 が作成されprivate、明示的なコンストラクターが削除されるため、fooのコンストラクターが暗黙的に定義されます。G++ は次の警告を表示します。

clang++警告を与えません。

暗黙の public コンストラクターがあるため、この警告は確かに正しくないようです。何が起きてる?これはバグですか?

編集:おそらくClang ++は警告を発行しないようです。次のクラスでも、警告は発生しません-Wctor-dtor-privacy

おそらく、この警告は単に G++ コマンドラインの互換性のために提供されているだけで、実際には何もしないのでしょうか? (このクラスは、GCC で非常に賢明な警告を生成することに注意してくださいwarning: ‘class ReallyTrulyPrivateOnly’ only defines private constructors and has no friends [-Wctor-dtor-privacy]:)

編集 2:この警告の動作は十分に理解されておらず、文書化されておらず、この問題は発見され、バグ 55813で報告されていると思います。これはリリース 4.8 で「修正済み」とマークされましたが、動作がまだ怪しいと思われるため、この質問を指摘するコメントを追加しました。

EDIT 3:上記の編集のバグは同じ問題ではありません。この問題について、新しいバグ レポート (71484)を作成しました。

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

gcc - g++ 認識されないコマンド オプションを無視する

g++ では、認識されないコマンド ライン オプションを使用してパッケージをビルドすることはできません

この認識されないコマンド ライン オプションを許可するには、g++ が必要です。これは可能ですか?

編集

これは、自作の g++-5 を使用して可能ですか?

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

c++ - g++ 4.8.4 と g++ 5.3.1 の間で c_str() の寿命は変わりましたか?

上記のプロセスが継続的に実行され、適切な順序で開始されることを確認するデーモンからプロセスを開始します。

ある時点で、プロセスを開始したいexecv()ので、引数用の文字列の配列を次のように準備します。

ほとんどの場合、そのような引数は 10 個ほどあります。

ここで、execv()裸のポインターの配列にのみアクセスします。したがって、次のようにして、そのようなポインターの配列を作成します。

次にexecv()、最後の配列で呼び出すことができます。

これは、g++ 4.8.4 を使用した Ubuntu 14.04 で完全に機能していましたが、どういうわけか、c_str()g++ 5.3.1 でコンパイルされた同じコードを実行しようとすると、ポインターが無効になります。

execv()私の理解では、ベアポインタの配列を作成する最初のループと呼び出しの間で文字列を変更していないため、これはそうではありません。

リファレンスには次のように書かれています。

c_str() から取得したポインターは、次の方法で無効にすることができます。

  • 文字列への非 const 参照を標準ライブラリ関数に渡す、または
  • operator[]、at()、front()、back()、begin()、rbegin()、end()、rend() を除く、文字列に対する非 const メンバー関数の呼び出し。

PS私はすでに修正を行っていstdup()ますc_str()。可能であれば、文字列の余分なコピーを1つ避けたいと思っていました...

0 投票する
0 に答える
495 参照

g++ - dce R_X86_64_PLTOFF64 の再配置エラー

Direct Code Execution (DCE) - ネットワーク シミュレータ ns-3 の拡張機能で、偽の POSIX レイヤーを提供することでシミュレータ内で実際のプログラム (VLC、iperf) を実行できます - ubuntu へのアップグレード以来、成功していません。ゼニアル。DCE をコンパイルするには、最初にプログラムを実行./waf configureし、最後にプログラムをビルドします。

これを修正するためのアイデアが不足していることを認めます。コンパイラをアップグレードしたときに最初に発生しました: gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2)

詳細: https://github.com/direct-code-execution/ns-3-dce/issues/46

の結果は次のとおりです: ./waf build -v https://transfer.sh/tj7uf/temp

そしてhttps://transfer.sh/qE5Cd/link-stepでの結果:

(R_X86_64_PLTOFF64 を検索)

何かヒントがあればお待ちしております

乾杯