상당히 큰 C ++ 공유 객체 라이브러리를 작성 중이며 디버깅을 어렵게 만드는 작은 문제가 발생했습니다.
헤더 파일에 함수 / 메서드를 정의하고이를위한 스텁을 만드는 것을 잊은 경우 (개발 중), 실행 파일이 아닌 공유 객체 라이브러리로 빌드하고 있기 때문에 컴파일 타임에 오류가 발생하지 않는다는 오류가 나타나지 않습니다. 그 기능을 구현하는 것을 잊었습니다. 내가 뭔가 잘못되었음을 알아내는 유일한 방법은 런타임에이 라이브러리에 연결하는 응용 프로그램이 결국 '정의되지 않은 기호'오류로 넘어갈 때입니다.
컴파일 타임에 필요한 모든 기호가 있는지 확인하는 쉬운 방법을 찾고 있습니다. 아마도 Makefile에 추가 할 수있는 것입니다.
내가 생각 해낸 한 가지 해결책은 컴파일 된 라이브러리를 실행하여 nm -C -U
정의되지 않은 모든 참조 목록을 가져 오는 것입니다. 문제는 GLibC와 같은 다른 라이브러리에있는 모든 참조 목록과 함께 나타납니다. 물론 최종 응용 프로그램이 함께 작성 될 때이 라이브러리와 함께 연결됩니다. 내 모든 헤더 파일 nm
을 grep
통해 to 의 출력을 사용하고 해당하는 이름이 있는지 확인할 수 있습니다. 확실히 이것은 드문 문제가 아니며 더 나은 해결 방법이 있습니까?
nm -C -u
저를 여러 번 구했습니다! (-u
내 시스템 의 소문자 에 유의하십시오 .) 다음에 필요할 때 찾을 수 있도록 여기에이 주석을 남겨 둡니다.