GCC 6.0 の開発が進行中の中で最新の C 1z 機能を利用しようとすると、次の場合に特有のリンカー エラーが発生します。 Experimental::filesystem ヘッダーを含むサンプル コードをコンパイルしています。
問題は明らかです次のコードを実行すると、
#include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { fs::path p1 = "/home/pete/checkit"; std::cout << "p1 = " << p1 << std::endl; }
このコードをコンパイルすると次のエラーが発生します:
undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
解決策:
に反して初期の仮定では、ファイルシステム TS は C 1z に関連付けられておらず、むしろ別個の仕様を構成しています。ファイルシステム TS の GCC 実装は、C 11 モードでアクセスできます。リンク エラーを解決するには、次のフラグをリンク コマンドに追加する必要があります:
-lstdc++fs
この命令は、experimental::filesystem ヘッダーに必要な実装を含む適切なライブラリに対してプログラムがリンクすることを保証します。
更新:
GCC の以降のバージョン (8.x 以降) ではサポートが導入されていますC 17 ファイルシステム ライブラリ用。 <ファイルシステム>経由でアクセスできます。ヘッダーと std::filesystem 名前空間。この実装が安定するまで、これらの機能を利用するには -lstdc fs に対するリンクが必要です。
GCC 9 では、C 17 std::filesystem コンポーネントは -lstdc fs なしで使用できますが、std::experimental ::filesystem シンボルは、GCC 13.3 の -lstdc exp を通じて利用可能になります。
以上がC 1z で `experimental::filesystem` を使用するとリンカー エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。