GCC C 링커 오류: 가상 테이블 및 생성자에 대한 정의되지 않은 참조
C에서 가상 함수를 사용하면 파생 클래스가 해당 클래스에 정의된 메서드를 재정의할 수 있습니다. 기본 수업. 가상 함수를 사용하는 프로그램을 링크할 때 링커에서는 이러한 메서드 정의가 개체 파일에 있어야 합니다. 이러한 정의를 제공하지 않으면 다음과 같은 정의되지 않은 참조 오류가 발생합니다.
가능 원인
이러한 오류는 다음을 포함한 다양한 이유로 발생할 수 있습니다.
정적 라이브러리 및 클래스 가용성 확인
라이브러리 비트: 정적 라이브러리가 64비트인지 확인하려면 다음 파일을 사용하세요. 명령:
file -L <library_path>
라이브러리가 64비트인 경우 64비트 x86-64 공유 객체를 표시해야 합니다.
클래스 가용성: objdump -t 명령을 사용하여 라이브러리에 특정 항목이 포함되어 있는지 확인합니다. class:
objdump -t <library_path> | grep <class_name>
클래스가 있으면 출력에 나열됩니다.
예제 문제
제공된 오류 로그에 표시된 것처럼 SomeClass::close()에 대한 정의되지 않은 참조는 클래스가 사용되었지만 정의되지 않았음을 나타냅니다. 마찬가지로 SomeOtherClass에 대한 SomeClass::SomeClass() 및 vtable에 대한 정의되지 않은 참조는 SomeOtherClass 클래스의 생성자와 가상 테이블이 개체 파일에 정의되어 있지 않음을 나타냅니다.
해결책
이 문제를 해결하려면 모든 가상 함수가 적절한 하위 클래스에 정의되어 있는지, 필요한 헤더 파일이 포함되어 있는지, 올바른 라이브러리가 프로그램입니다.
위 내용은 GCC C에서 '가상 테이블 및 생성자에 대한 정의되지 않은 참조' 링커 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!