C 프로젝트를 구성하는 동안 링커에서 때때로 "XXX용 vtable에 대한 정의되지 않은 참조" 또는 "정의되지 않은 참조"와 같은 수수께끼 같은 오류가 발생합니다. 클래스이름::클래스이름()으로." 이러한 오류는 주로 가상 함수 및 상속에서 발생하는 문제를 나타냅니다.
이 문제는 하위 클래스가 정의를 제공하지 않고 재정의된 가상 함수를 선언할 때 자주 발생합니다. 다음 코드 조각을 고려하세요.
class Base { public: virtual void f() = 0; }; class Derived : public Base { public: void f(); };
이 예에서 하위 클래스 Derived는 재정의된 함수 f()를 선언하지만 정의하지는 않습니다. 컴파일러가 선언을 이해하는 동안 링커가 정의를 찾지 못하기 때문에 이러한 생략으로 인해 링커 오류가 발생합니다.
라이브러리 확인 아키텍처: 연결하려는 정적 라이브러리가 64비트인지 확인하려면 라이브러리 문서를 참조하거나 file 명령을 사용하세요. 라이브러리 파일을 검사하려면:
file /path/to/library.a
클래스 존재 확인: 라이브러리에 예상 클래스와 메서드가 포함되어 있는지 확인하려면 nm 명령을 사용하세요.
nm /path/to/library.a | grep SomeClass
링커 오류를 해결하고 연결 프로세스를 성공적으로 완료하려면 하위 클래스에 선언된 가상 함수에 대한 정의를 제공하고 연결 단계에 관련 라이브러리가 올바르게 포함되어 있는지 확인하세요.
위 내용은 내 C 링커에서 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!