헤더 파일에 struct
을 완전히 구현하면 공유 라이브러리의 일부로 사용될 때 "_attribute __ ((visibility ("default ")))"필요성에 어떤 차이가 있는지 확실하지 않습니다. 실행시헤더 파일에서 구현이 완료된 구조체에 __attribute __ ((visibility ("default")))가 필요합니까? (C++)
0
A
답변
0
당신이
-fvisibility=hidden
모든 내 보낸 기능과 가시성 기본값으로 설정하고 공유 라이브러리의 사용자가 그래서 가능한 변수로 컴파일하는 경우가 나타납니다 : 다음
nm -C -D <library>.so
차이점을 기본값으로 설정할 때와 그렇지 않을 때 차이점을 볼 수 있습니다.
1
전체 인라인 클래스의 경우 표시 여부를 기본값으로 설정할 필요가 없습니다. 실제로이 클래스를 추가하면이 헤더를 포함하는 모든 공유 모듈에서 클래스 기호가 내보내 져서 바이너리 크기가 커지고 시작 속도가 느려지므로 바람직하지 않습니다.
이 질문에 대한 대답은 아닙니다. 문제는 헤더 파일에서 구현 된 모든 구조체를 사용하여 구조체에 차이가 있는지 여부입니다. 내가받은 인수는 "헤더 파일은 라이브러리와 함께 어쨌든 출하되므로 구조체에 가시성 기본값을 사용할 필요가 없습니다."... – FCR
가시성은 공유 라이브러리의 심볼을 설정하거나 설정하지 않도록하는 것입니다 이후에 사용할 수 있습니다. 기본값으로 설정할 필요가 없으면 설정하지 않아도됩니다. – Glick