2014-03-03 2 views
0

RPM을 구축하고 있는데 다음과 같은 명령을 사용하여 RPM의 공유 객체를 빌드하는 데 사용됩니다.g ++ 명령에서 ".map"파일의 용도는 무엇입니까?

g++ /*some compiler options*/ -O1 -Wl,--version-script abc.map -L<some paths> and the remaining command. 

"--version-script"옵션과 "abc.map"파일을 명령에서 어떻게 사용하는지 이해하지 못했습니다. 그것은 무엇입니까? Follwoing은 "abc.map"파일의 내용입니다.

URE_1{ 
    global: 
     _ZTI*; _ZTS*; # weak RTTI symbols for C++ exceptions 
    /*some method names explicitly*/ 
    local: 
    *; 
} 

"공유 객체"파일의 심볼 가용성과 관련 있다고 생각하지만 확실하지 않습니다.

+0

https://www.gnu.org/software/gnulib/manual/html_node/LD-Version-Scripts.html 및 https://sourceware.org/binutils/docs/ld/VERSION.html을 참조하십시오. _Linker 버전 스크립트 _. 또는 http://stackoverflow.com/questions/435352/limiting-visibility-of-symbols-when-linking-shared-libraries/452955 –

답변

1

"공유 객체"파일의 심볼 사용 가능성과 관련 있다고 생각하지만 확실하지 않습니다.

당신 말이 맞습니다.

3.9 VERSION Command를 참조하십시오 ELF를 사용하는 경우

링커는 심볼 버전을 지원합니다. 기호 버전은 공유 라이브러리를 사용할 때만 유용합니다. 동적 링커는 심볼 버전을 사용하여 이전 버전의 공유 라이브러리에 링크되었을 수있는 프로그램을 실행할 때 특정 버전의 함수를 선택할 수 있습니다.

+0

예, Red Hat이 패치를 백 포트하는 경우 예를 들어, 그것. 그런 다음 다른 소프트웨어의 최신 버전은 플래그가 지정된 특정 버전이 필요하다는 것을 명시 적으로 알립니다. 나는 패치 된'expat' 1.x로 그것을 만났다. –