問題タブ [clang++]
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++ - 関数の宣言と実現で例外仕様に互換性がない
次のコードがあります
GCC と clang はそれをうまくコンパイルします。しかし、標準には次のような段落があります。
n3376 15.4/4
関数の宣言に、すべての例外を許可する noexcept-specification ではないexception-specification がある場合、その関数の定義と明示的な特殊化を含むすべての宣言には、互換性のある exception-specification が必要です。
次の例: gcc - エラー、clang - 警告
これらのスニペットに違いがあるのはなぜですか? ありがとう。
c++ - テンプレートクラスのテンプレート化されたコンストラクターの明示的なインスタンス化
Clang3.2のバグなのかC++03の違反なのかはわかりませんが、テンプレートクラスのテンプレートコンストラクターの明示的なインスタンス化は失敗するようですが、テンプレートクラスのテンプレート化されたメンバー関数の明示的なインスタンス化は成功します。
たとえば、以下はclang++とg++の両方で問題なくコンパイルされます。
一方、以下はg ++では警告なしにコンパイルされますが、clang++では失敗します。
特に、次の形式の2つのエラーメッセージが表示されます。
これは標準の違反ですか、それともclang ++のバグですか?
libc++ - clang ++でファイルが見つかりません
clang を使用して c++ プロジェクト (g++ でブースト) をコンパイルしようとしています。私は、clang ツールチェーンを使用してブースト ライブラリ (1.53) を正常にコンパイルしました。CMake を使用してプロジェクトをコンパイルしていますが、コンパイルが次のエラーで失敗しています。
私は-stdlib=libc++
コンパイラに渡しています。libc++ をインストールするためにどのパッケージ (ubuntu) をインストールすればよいかわかりません。私のマシンにはclangとllvmがインストールされています。
libc++ をダウンロードしてコンパイルする必要がありますか? それとも、clang をインストールするときに自動的にインストールされますか?
windows - Clang++ がコードをコンパイルしないのはなぜですか?Windowsで?
なぜclang ++はこれをコンパイルするのですか:
これをコンパイルしたくない:
コマンドライン:
clang++ -c hello.cpp -emit-llvm -o hello.bc
次のように出力されるエラーが多すぎます。
Windows 7 64、clang-3.2、llvm-3.2、VS2012
=====更新=====
コマンド ライン (-v を使用):
私が得るもの:
..等。その後:
..等。だから...-internal-isystem
間違ったパスを指してください。変更方法は?
c++ - 評価中に値を変更すると、意図しない結果が生じる g++ および演算子 <<
簡単なコードを次に示します。
これを g++ -O0 (4.7.2) でコンパイルすると、出力は a413b になり、-O2 の場合、出力は a414b になります。clang++ 3.2 の場合、出力は a314b です。
コードのこの部分で、c++ に対して未定義のことをしましたか?
c++ - makefileを使用したg++/clang++のパラメーターの順序
Ubuntu 12.04でCERNのROOTを操作しているときに、この非常に厄介な問題に遭遇しましたが、より一般的な問題だと思います。
次のmakefileを使用してコンパイルおよびリンクする外部参照を含むC++コードがいくつかあります。OS X 10.8を搭載したMacとSL5を搭載したサーバーでは、これは正常に機能します。
に評価します
これにより、Ubuntuサーバーで未定義の参照とリンカーエラーが発生します。私はすでにライブラリを設定しようとしましLDFLAGS
たが、同じ結果が得られます。手動でコンパイルし、ソースファイルと-oオプションをライブラリの前に置くと、問題なくコンパイルされます。
他のスレッドから、コマンドの順序が重要である可能性があることを理解しましたが、なぜそれが一部のマシンで機能し、他のマシンでは機能しないのか疑問に思います。make
順序が重要だったとしても、私はそれを自分で理解するのに十分賢いと思いました。
今の質問は次のとおりです。どうすればこれを回避できますか?別のバージョンのmakeまたはldを使用する必要がありますか?makefileを変更する必要がありますか?
前もって感謝します!
c++ - G++、clang++、および std::function
C++ 11 の新しい std::function をいじっていたところ、g++ 4.8 ではなく、clang++ 3.2 およびインテル C++ コンパイラー 13.1 でコンパイルされる例を作成しました。これをバグとして報告する前に、本当にばかげたことをしていないことと、これが実際にコンパイルされることを確認しようと思いました。では、次のコードは有効な c++11 ですか?
このコードがあまり役に立たないことはわかっていますが、clang と Intel C++ がコンパイルし、gcc がコンパイルしなかったことは奇妙に思えました。
編集: gcc は、マップにファンクターまたは関数ポインターを渡すときにも同じコードをコンパイルしません。
clang と icpc もこれらの両方をコンパイルします。
linker - Clang のリンク時の最適化が Fedora 18 で正しく機能しない
私は clang の初心者なので、ばかげたことをしている可能性があります。しかし、ディストリビューションが提供するパッケージで -flto に対処する質問が見つからない場合は、ここで検索するなど、解決策を探すのに数時間を費やしました。この説明の詳細は Fedora 18 に固有のものですが、Ubuntu 13.04 でも同様の問題が発生しているため、Fedora に固有の問題ではありません。それは私かclangのどちらかです。
clang++ -flto
問題:リンク時の最適化の利点を得るために、単純な hello-world プログラムをコンパイルしようとしています。-flto がなければ正常に動作します。-flto を使用すると、リンクに失敗します。clang -flto -o hello hello.o -v
完全なリンカー コマンド ラインを表示するためにas を呼び出すと、次のようになります。
次の 2 つの問題があるようです。
clang++ はリンカーを として呼び出しますが、
/usr/bin/ld
これはゴールド リンカーではありません。Fedora18 は、ゴールドを としてインストールします/usr/bin/ld.gold
。/usr/local/bin/ld
からへのシンボリックリンクを作成しようとしましたが、それが/usr/bin/ld.gold
であることを確認しましたwhich ld
が/usr/local/bin/ld
、clang++ はそれを使用しません。/usr/bin/ld に固定されているようです。clang++ は、
-plugin /usr/bin/../lib/LLVMgold.so
. それは間違っています。Clang の Fedora ディストリビューションでは/usr/lib64/llvm/LLVMgold.so
.
次の調整を加えて、上記のリンカー行を手動で呼び出してみました。
に置き換え
-plugin /usr/bin/../lib/LLVMgold.so
ます-plugin /usr/lib64/llvm/LLVMgold.so
。これにより、エラー メッセージが表示されますhello.o: file not recognized: File format not recognized
。そのため、非ゴールド リンカはプラグインを認識しているように見えますが、LLVM ビットコードを含む .o を取りません。に置き換え
/usr/bin/ld
ます/usr/bin/ld.gold
。これは機能し、期待どおりに実行される実行可能ファイルを生成します。上記の両方の
--plugin
代わりに-plugin
. この変更に違いはありません。
では、clang -flto を使用するためにシステム提供のパッケージに固執することを好む人にとって最良の方法は何でしょうか? これらをオーバーライドできる構成ファイル、または文書化されていないオプションまたは環境変数があることを願っています。または、パッケージが不足していて、「yum install ...」で修正されることをお勧めします。
リンカを直接呼び出さない方がよいと思います。なぜなら、makefile は、システム オブジェクトとライブラリ (たとえば、crt1.o、crtbegin.o、crtend.o) を認識していなければならないからです。自分で clang をビルドすることもできますが、configure スクリプトには、リンカーとプラグインのパスを構成できるものは何も表示されません。
Fedora 18 を実行しています。コンピューター上のディストリビューション以外のパッケージは、Google Chrome と VMware Tools (VMWare Fusion 内のゲスト) だけです。関連する Fedora パッケージのバージョン (2013 年 4 月 29 日現在、コンピューター全体が「yum 更新」されています):