정의되지 않은 기호 찾기

정의되지 않은 기호 찾기

소스 코드를 다운로드하고 컴파일한 프로그램을 실행하려고 합니다. 프로그램을 실행하려고 하면 다음과 같은 메시지가 계속 나타납니다.

unable to load undefined symbol _z15InvalidateImageSs

이 오류가 발생하는 이유를 확인하려고 합니다. 프로그램은 실제로 다른 프로그램에 의해 로드된 라이브러리입니다. 내 프로그램은 .so 파일로 컴파일됩니다.

난 달린다:

$ nm myprog.so > nm.txt

기호가 파일에 나타나지만 연관된 주소가 없습니다.

  1. 다음을 사용하여 소스 트리에서 기호를 검색합니다.

$ find . -type f | xargs fgrep -I '_zinvalidateimagess' | grep -v 'Binary

결과가 없습니다. 2. 모든 표준 로드 라이브러리에서 이 기호를 검색했습니다.

$ scanelf -l -s _zInvalidateImageSs | grep -I '_zinvalidateImageSs'

이번에도 결과가 없습니다.

그래서 내 질문은: 기호가 소스 트리의 어느 곳에서도 참조되지 않는 경우 .so 파일에 문제가 있는 이유는 무엇입니까? 이 기호가 어디서 왔는지 어떻게 알 수 있나요?

답변1

이 라이브러리의 소스는 다음과 같습니다.발표하다하나의 상징이 아닌정의그, 이런 일을 해서

extern InvalidateImage(const char *);

그럼 그걸 사용해

const char *foo = InvalidateImage(bar);

라이브러리이기 때문에 해당 기호를 사용하는 프로그램을 실행하지 않으면 이를 알 수 없습니다. 갈 곳바라보다기호는 라이브러리 소스를 다운로드한 위치입니다. 라이브러리 개발자가 관련 소스를 직접 제공했거나 소스를 어디서 얻었는지에 대한 단서를 제공했을 수 있습니다.

그만한 가치가 있기 때문에 스크립트(exports그리고externs) 내가 관리하는 프로그램에 기호가 누락되었는지 확인합니다.

추가 자료:

관련 정보