2014-11-13 5 views
0

코드가 라이브러리의 특정 기호를 참조하는 경우 연결을 실패하게 만드는 방법이 있습니까?특정 기호가 참조 된 경우 링크가 실패합니다.

나는 링커 스크립트 언어에 그러한 지시어가 있다는 것을 어렴풋이 기억하는 것 같지만 분명히 GNU LD가 아닙니다 (아마 잘못된 메모리 일 것입니다).

타사 라이브러리의 일부가 실수로 응용 프로그램에 링크되는 것을 방지하려면이 기능이 필요합니다. 그것이 링크되면, 런타임에 혼란을 야기하는 정적 이니셜 라이저를 추가합니다 (이것은 임베디드 프로젝트이므로 환경이 약간 이상합니다). 문제의 타사 라이브러리를 변경할 수 없습니다. 빌드 할 때 오류를 감지하고 싶습니다. 나는지도 파일을 구문 분석하고 문제가되는 부분을 발견하면 오류를 발행하는 포스트 빌드 스크립트를 작성할 수 있다고 생각하지만 위에서 언급 한 [false?] 메모리는 링커를 단독으로 사용할 수 없다는 것을 확인하도록합니다.

저는 GNU GCC 툴체인을 사용하고 있습니다. 여기

/* stubs.c */ 

void ERROR_DO_NOT_REFERENCE_THIS_SYMBOL(void); 

void Offending3rdPartyFunction(void) 
{ 
    ERROR_DO_NOT_REFERENCE_THIS_SYMBOL(); 
} 

가, 기호 ERROR_DO_NOT_REFERENCE_THIS_SYMBOL이 정의되지 않습니다 : 점심 식사를 위해 밖으로 스테핑

답변

0

좋아, 날이 (매우 명백) 해결책을 찾을 수있었습니다. 추가 소스 파일이 참조되지 않아야하는 각 기능에 대해 위에 표시된 스텁과 함께 프로젝트에 추가됩니다. 코드가 이러한 함수 중 하나를 참조하면 스텁이 라이브러리 제공 기호보다 우선하며 링크가 실패합니다.

test.cpp:(.text._TestFunc+0x4): undefined reference to `ERROR_DO_NOT_REFERENCE_THIS_SYMBOL()' 
collect2.exe: error: ld returned 1 exit status