정적 C 라이브러리를 C 코드와 링크할 때 정의되지 않은 참조 오류
C 프로그램을 정적 C 라이브러리와 링크할 때 "정의되지 않은 참조 오류" Linking 명령어에 라이브러리 이름을 지정해도 "오류가 발생할 수 있습니다. 이 문제는 C와 C 컴파일 프로세스의 차이로 인해 발생합니다.
C에서 컴파일러는 함수 기호를 개체 파일의 잘못된 이름으로 변환하는 이름 맹글링을 수행합니다. 그러나 C 라이브러리 함수는 이름 변경을 거치지 않습니다. 따라서 링커는 개체 파일의 잘못된 함수 이름과 라이브러리의 잘못된 함수 이름을 일치시키는 데 어려움을 겪게 되어 정의되지 않은 참조 오류가 발생합니다.
해결 방법
이 문제를 해결하려면 C 라이브러리를 연결하는 C 프로그램은 extern "C" 블록을 사용해야 합니다. 이 블록은 그 안에 있는 모든 선언과 정의에 대한 이름 맹글링을 억제합니다. extern "C" 블록에 라이브러리 함수 선언을 포함하면 링커가 이를 식별하고 정의되지 않은 참조 오류를 해결할 수 있습니다.
또는 라이브러리 함수 선언이 포함된 헤더 파일을 조건부 선언으로 래핑하여 두 항목을 구별할 수 있습니다. C 및 C 컴파일 환경. C 컴파일의 경우 선언은 extern "C" {} 블록으로 묶어야 합니다. 이렇게 하면 라이브러리 함수에 대한 이름 변경 억제가 보장되고 정의되지 않은 참조 오류 없이 성공적인 연결이 가능해집니다.
위 내용은 정적 C 라이브러리를 C 코드에 연결할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!