2009-08-17 3 views
3

짧은 : 내가 SO에있는 모든 미해결 종속성을 나열 할 무언가를 찾고 있는데, 종속성에있는 SO를 고려해야합니다.공유 객체 종속성을 자동으로 파악할 수 있습니까?

긴 :

내가 Linux-에서 공유 객체에 정적 컴파일 된 코드를 많이 변환하고있어 결정하는 쉬운 방법이 어떤 다른 SO의 내 최근 SO 컴파일하는 동안 시험 외에 & 오류에 따라 달라집니다 그것을로드하려면?

더 좋은 방법이있을 것이라고 확신하지만 아직 찾을 수 없습니다.

"ldd"가 발견되었지만 SO가 의존하고 있다고 말한 것만 표시합니다. "SO"가 다른 SO를 포함하고 있는지 확인하기 위해 SO가로드되지 않으면 "nm"을 사용했습니다.

+0

Plz의 이름을 공유 객체로 바꿉니다. 그래서 SO는 StackOverflow를 의미합니다. –

+0

이름 바꾸기를 완료했습니다. – Luciano

답변

2

나는 당신을위한 코드가없는,하지만 난 포인터를 제공 할 수 있습니다 :

그것은 단지 그래프 문제입니다. 제공된 바이너리 또는 공유 객체에 대한 동적 심볼 테이블을 덤프하려면 objdump -T을 사용해야합니다. 많은 출력을 볼 수 있습니다. 플래그는 다소 혼란 스럽지만, 심볼이 *UND*이거나 세그먼트 이름 (.text 등)이있는 경우 중요한 부분입니다.

언제든지 *UND*이 표시됩니다. 이는 해결되지 않은 정의되지 않은 기호임을 의미합니다. 정의 된 기호는 해결 대상입니다.

작은 파이썬을 사용하면 필요한 것을 찾을 수 있습니다.

2

"ldd -r foo.so"foo.so에 필요하지만 직접적인 종속성에 의해 제공되지 않는 기호 세트를 인쇄해야합니다. 이 같은 대안

, 링크 foo.so :이 실패

gcc -shared -o foo.so foo.o bar.o -ldep1 -ldep2 -Wl,--no-undefined 

(연결하기) foo.o 또는 bar.o하지 libdep1 또는 libdep2 또는 libc에 의해 제공되는 뭔가를 사용하는 경우.

+0

"ldd -r foo.so"-> "동적 실행 파일이 아닙니다" –

관련 문제