공유 라이브러리 인터페이스 검토

공유 라이브러리 인터페이스 검토

처음 사용하는 라이브러리에 문제가 있습니다(Boost.Python이지만 제 문제는 이 경우보다 더 일반적입니다).

따라서 내가 구축한 라이브러리의 인터페이스가 무엇인지 확인해야 합니다. 최소한 모든 것을 올바르게 구축했는지 확인하기 위해서입니다.

(Python은 이름이 변경된 .so를 .pyd의 PYTHONPATH에 넣었음에도 불구하고 내 모듈을 볼 수 없다고 불평했습니다. 그래서 내 라이브러리에 문제가 있었습니다)

.so 라이브러리의 모든 공개 함수 이름과 가능하다면 해당 프로토타입의 이름을 알아야 합니다.

비슷한 결과를 얻기 위해 설치할 수 있는 명령이나 패키지가 있습니까?

답변1

ELF 파일(실행 파일 또는 라이브러리)에서 정보를 얻을 수 있습니다 readelf.

내보낸 기호를 찾고 있는 것 같으니 다음을 사용하세요.

$ readelf --dyn-syms libyourthing.so

C 유형 함수의 경우 매개변수 유형이나 반환 값이 아닌 함수 이름만 가져올 수 있습니다. C++ 함수의 경우 잘못된 이름을 얻습니다. 명령의 출력을 파이프하여 c++filt함수 이름과 인수 유형을 가져옵니다(그러나 여전히 반환 값은 없음).
(전역 변수도 이름과 크기를 포함하여 출력에 표시되지만 유형은 표시되지 않습니다.)

다른 유용한 도구 로는 유사한 정보를 제공하는 nm및 이 있습니다.objdump

하지만 그것이 당신에게 도움이 될지 확신할 수 없습니다. 또한 stracePython이 당신이 생각하는 곳을 찾고 있는지 확인 해야 합니다 . 그것은 다음과 같습니다:

$ strace -e trace=open python your_code_that_loads_your_lib.py

Python이 수행한 모든 호출이 표시됩니다 open. 거기에서 라이브러리 이름을 찾으세요.많은위에서 녹음하고 필터링합니다). 각 통화마다 반환 코드도 표시되므로 무슨 일이 일어나고 있는지 더 잘 알 수 있습니다.

아, 그리고 32비트 라이브러리를 64비트 Python 런타임으로 로드하려고 하거나 그 반대로 로드하려고 하지 않는지 확인하세요.

관련 정보