2

で動作するように GCC 4.7 をコンパイルしましたがstdatomic.h、うまくいかないようです-Istdatomic.hに住んでいるようです/usr/include/c++/4.4.3が、リンカーは、近くのディレクトリに他のファイルがたくさん必要だと言っています。-Iそれらすべての場合でも、エラーが発生しますundefined reference to atomic_flag_clear_explicit。これを正しくリンクする方法はありますか?

4

3 に答える 3

2

GCC 4.4 および 4.5 の <stdatomic.h> ヘッダーは、C++0x アトミックの初期ドラフトからのものでしたが、最終標準の一部ではないため、libstdc++ から削除されました。

C++ コンパイラは、C++11 <atomic> ヘッダーを介して C++11 アトミックをサポートするため、C++ コードでそのヘッダーを使用する必要があります。

C コンパイラが C11 アトミックをサポートする場合、<stdatomic.h> ヘッダーが再び提供されます。

于 2013-02-16T14:55:27.903 に答える
2

まず、GCC 4.7 でコンパイルしている場合は、GCC 4.4 のディレクトリから何も含めたりリンクしたりしないでください。

次に、-Iヘッダー ファイルの検索パスにのみ影響します。「未定義の参照」はリンカ エラーであり、通常は適切なライブラリが見つからなかったことを意味します。でライブラリ検索パスを変更します-L。リンカーは、正しい名前のライブラリが見つからなかったとは言いませんでした。シンボルが見つからなかったと言っているので、見つかったライブラリにはそのシンボルがなかったことは明らかです。おそらくインストールの問題が原因で、バージョン管理の問題があることをお勧めします。

于 2012-03-29T20:11:17.033 に答える