2016-09-15 9 views
2

리눅스에서 공유 라이브러리에 대한 'nm'명령의 출력을보고 있습니다. 나는 이것을 본다nm 명령의 출력에서 ​​'@@'기호는 무엇을 의미합니까?

U [email protected]@GLIBC_2.0 

stderr는 glibc2.0과 하드 링크되어 있습니까? 이 질문을하는 이유는 내 보낸 라이브러리의 다른 버전 중 하나에 대해 빌드 된 라이브러리 세트 (a1.so, a2.so, ...라고 가정 해 봅시다)가 있습니다 (예 : ex.so.1, ex.so.2). 내 보낸 라이브러리는 모두 foo라는 함수를 내 보냅니다. a * .so 라이브러리가 로딩 될 때, 그들은 어쨌든 마술처럼 그들이 빌드 된 라이브러리 내에서 적절한 함수를 패치합니다. 나는 아래와 같이 다른 라이브러리에 대한 nm의 출력을 봅니다.

nm a1.so | grep foo 
U [email protected]@ex.1 

nm a2.so | grep foo 
U [email protected]@ex.2 

여기서 '@@'역할은 무엇입니까? '@@'에 대한 문서를 찾을 수 없습니다. 참고 문헌이 도움이 될 것입니다.

+0

상징 버전입니다. glibc와 같은 라이브러리에는 동일한 심볼의 여러 버전이 포함될 수 있습니다. –

+0

Ulrich Drepper의 [this] (https://www.akkadia.org/drepper/dsohowto.pdf)의 3 절이 더 자세하게 설명되어 있습니다. –

+0

Thanks @ n.m. 브렛 헤일. 나는 그 종이를 지나갈 것이다. –

답변

2

@은 심볼의 버전을 지정할 수 있습니다. 기호에 대한 여러 정의가 존재할 경우 기호가 서로 다릅니다. 기본 버전을 나타내려면 @@이 사용됩니다. 명시 적 버전이 지정되지 않은 경우 기본 버전이 선택됩니다.

자세한 내용은 binutils VERSION documentation에서 찾을 수 있습니다 ("@@"로 검색).