>백엔드 개발 >C++ >GCC 6.0에서 `std::experimental::filesystem`을 사용할 때 링커 오류가 발생하는 이유는 무엇입니까?

GCC 6.0에서 `std::experimental::filesystem`을 사용할 때 링커 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-17 13:13:02369검색

Why am I getting a linker error when using `std::experimental::filesystem` in GCC 6.0?

experimental::filesystem에 대한 링커 오류

gcc 6.0의 현재 개발 버전에서 새로운 c 1z 기능을 활용하려고 하면 예제 프로그램에서 링커 오류가 발생했습니다.

#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;

int main()
{
    fs::path p1 = "/home/pete/checkit";

    std::cout << "p1 = " << p1 << std::endl;
}

다음과 같은 결과가 발생합니다. 오류:

/opt/linux-gnu_6-20151011/bin/g++ --std=c++1z main.cpp -O2 -g -o go
/tmp/ccaGzqFO.o: In function \`std::experimental::filesystem::v1::__cxx11::path::path(char const (&) [36])':
/opt/linux-gnu_6-20151011/include/c++/6.0.0/experimental/bits/fs_path.h:167: undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
collect2: error: ld returned 1 exit status

해결 방법

파일 시스템 TS는 C 1z 지원과 다르며 C 1z 작업 초안의 일부가 아닙니다. -lstdc fs를 사용하여 라이브러리에 액세스하면 연결 문제를 해결할 수 있습니다.

업데이트

  • GCC 8.x에서 C 17 파일 시스템 구현 -std=gnu 17 또는 -std=c 17을 사용하여 std::filesystem 네임스페이스에서도 사용할 수 있지만 -lstdc fs에 연결.
  • GCC 9에서는 C 17 파일 시스템 구성 요소를 -lstdc fs 없이 사용할 수 있습니다.
  • GCC 13.3에서는 std::experimental::filesystem 기호도 -lstdc exp에서 사용 가능

위 내용은 GCC 6.0에서 `std::experimental::filesystem`을 사용할 때 링커 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.