>백엔드 개발 >C++ >정적 C 라이브러리를 C 코드에 연결할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

정적 C 라이브러리를 C 코드에 연결할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-23 01:13:15854검색

Why Do I Get

정적 C 라이브러리를 C 코드와 링크할 때 정의되지 않은 참조 오류

C 프로그램을 정적 C 라이브러리와 링크할 때 "정의되지 않은 참조 오류" Linking 명령어에 라이브러리 이름을 지정해도 "오류가 발생할 수 있습니다. 이 문제는 C와 C 컴파일 프로세스의 차이로 인해 발생합니다.

C에서 컴파일러는 함수 기호를 개체 파일의 잘못된 이름으로 변환하는 이름 맹글링을 수행합니다. 그러나 C 라이브러리 함수는 이름 변경을 거치지 않습니다. 따라서 링커는 개체 파일의 잘못된 함수 이름과 라이브러리의 잘못된 함수 이름을 일치시키는 데 어려움을 겪게 되어 정의되지 않은 참조 오류가 발생합니다.

해결 방법

이 문제를 해결하려면 C 라이브러리를 연결하는 C 프로그램은 extern "C" 블록을 사용해야 합니다. 이 블록은 그 안에 있는 모든 선언과 정의에 대한 이름 맹글링을 억제합니다. extern "C" 블록에 라이브러리 함수 선언을 포함하면 링커가 이를 식별하고 정의되지 않은 참조 오류를 해결할 수 있습니다.

또는 라이브러리 함수 선언이 포함된 헤더 파일을 조건부 선언으로 래핑하여 두 항목을 구별할 수 있습니다. C 및 C 컴파일 환경. C 컴파일의 경우 선언은 extern "C" {} 블록으로 묶어야 합니다. 이렇게 하면 라이브러리 함수에 대한 이름 변경 억제가 보장되고 정의되지 않은 참조 오류 없이 성공적인 연결이 가능해집니다.

위 내용은 정적 C 라이브러리를 C 코드에 연결할 때 '정의되지 않은 참조' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.