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

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

Patricia Arquette
풀어 주다: 2024-12-02 00:55:11
원래의
467명이 탐색했습니다.

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

experimental::filesystem C 1z의 링커 오류

GCC 6.0의 지속적인 개발 중에 최신 C 1z 기능을 활용하려고 시도할 때 다음과 같은 경우에 독특한 링커 오류가 발생합니다. 실험적::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()'
로그인 후 복사

해결 방법:

초기 설정과 반대 가정하면 Filesystem TS는 C 1z에 속하지 않고 오히려 별개의 사양을 구성합니다. 파일 시스템 TS의 GCC 구현은 C 11 모드에서 액세스할 수 있습니다. 연결 오류를 해결하려면 연결 명령에 다음 플래그를 추가해야 합니다.

-lstdc++fs
로그인 후 복사

이 명령은 프로그램이 실험적::filesystem 헤더에 필요한 구현을 포함하는 적절한 라이브러리에 대해 연결되도록 보장합니다.

업데이트:

GCC 후속 버전(8.x 이상)에 지원 도입 C 17 파일 시스템 라이브러리용. 을 통해 액세스할 수 있습니다. 헤더 및 std::filesystem 네임스페이스. 이 구현이 안정성을 얻을 때까지 이러한 기능을 활용하려면 -lstdc fs에 대한 연결이 필요합니다.

GCC 9부터 C 17 std::filesystem 구성 요소는 -lstdc fs 없이 사용할 수 있지만 std::experimental은 ::파일 시스템 기호는 GCC 13.3에서 -lstdc exp를 통해 사용할 수 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿