2014-10-13 2 views
0

공유 라이브러리 (libapp.so)를 빌드 할 때 여러 오브젝트 파일 (obj1.o, obj2.o)을 가지고 있습니다. 연결된 모든 객체는 빌드 할 때 보이지 않는 플래그를 가졌지 만 최종적으로 (libapp.so, 아래 참조), 가시성 플래그를 hidden으로 사용하면 외부 라이브러리의 모든 내부 함수를 숨길 수 있습니까?공유 라이브러리를 작성하는 동안 심볼 가시성 숨기기

gcc -shared -fPIC -fvisibility=hidden obj1.o obj2.o -o libapp.so 

편집 : wRAR가 언급 한 바와 같이

, 난 버전이 최종 공유 라이브러리에있는 모든 기호를 숨길 cript 사용했습니다. libapp.version

{ 
    local: *; 
}; 

을 그리고 난 나의 공유 라이브러리를 구축 : 버전 스크립트는

파일로 삼았 작성되었습니다

gcc -shared -fPIC obj1.o obj2.o -o libapp.so -Wl,--version-script=libapp.version 

에도 지역 모든 기호를 붙여서, 난 여전히 볼 수 있습니다 모든 심볼이 존재한다는 것을 의미한다. 내가 여기서 뭐하고 있는거야?

답변

1

-fvisibility은 컴파일 타임 옵션이므로 링크 할 때 효과가 없습니다. 링크 시간에 기호를 숨기려면 ld에 대한 버전 스크립트를 작성할 수 있습니다.

+0

언급 한대로 버전 스크립트를 시도했습니다. 내 질문에 편집 섹션 내 시도를 참조하십시오. 제가 실수로 스크립트를 사용했다면 알려주십시오. –