ホームページ > バックエンド開発 > C++ > C 1z で `experimental::filesystem` を使用するとリンカー エラーが発生するのはなぜですか?

C 1z で `experimental::filesystem` を使用するとリンカー エラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-12-02 00:55:11
オリジナル
416 人が閲覧しました

Why am I Getting a Linker Error When Using `experimental::filesystem` in C  1z?

C 1z の実験的::filesystem リンカー エラー

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート