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 파일 시스템 라이브러리용. GCC 9부터 C 17 std::filesystem 구성 요소는 -lstdc fs 없이 사용할 수 있지만 std::experimental은 ::파일 시스템 기호는 GCC 13.3에서 -lstdc exp를 통해 사용할 수 있습니다. 위 내용은 C 1z에서 `experimental::filesystem`을 사용할 때 링커 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!