LD_PRELOAD
을 사용하여 라이브러리를 미리로드하는 프로그램을 실행하려고합니다. 런타임에 프로그램이 다음 오류를 던지고 있습니다.참조 된 기호를 찾을 수 없습니다.
ld.so.1: gdbser64: fatal: relocation error: file libmy.so: symbol _ZN10__cxxabiv118register_exit_codeEPFYvvE: referenced symbol not found
libmy.so
어디 register_exit_code
기호를 사용하지 않습니다. libmy.so에 의해 링크 된 표준 라이브러리가이 기능을 사용하는 경우 일 수 있습니다. 그러나 나는이 기호를 사용하고있는 사람이나 그것을 정의한 사람을 찾을 수 없습니다.
Solaris
에 있으며, CC(solaris cpp compiler)
을 사용하여 컴파일됩니다.
를 사용해야하는 것이 좋습니다, 당신은 파일이 심볼을 필요로하는 아이디어를 얻을 정의되지 않은 기호에 대한 objdump를 함께 검색 할 수 있습니다 . 그리고 자연스럽게 당신은 그들을 제공하는 파일을 검색 할 수 있습니다 ... – Klaus
libmy.so에 동적으로 링크 된 프로그램이나 실행 파일이 libmy.so shared-lib의 심볼'register_exit_code '를 기대할 수 있습니다. 따라서 libmy.so에 의존하는 실행 가능 파일이나 공유 라이브러리에서 가장 많이 발생합니다. –
@Klaus objdump는 기호를 정의되지 않은 것으로 표시하지만 정의/호출 된 파일/라이브러리는 표시하지 않습니다. 나는 'objdump -t libmy.so'를 사용했다. – user2137306