정적 라이브러리에 연결하고있어 llvm/Clang에서 죽은 코드를 제거하는 방법을 알아야합니다. 나는 Clang이 -Wl, --gc-section 또는 -dead_strip과 같은 것을 가지고 있음을 암시하는 어떠한 문서도 찾을 수 없다.정적 연결 중 죽은 코드를 제거하는 Clang (-Wl, --gc-sections에 해당하는 gcc와 동일)
더 높은 최적화 수준에서 일부 데드 코드 제거가 자동으로 수행된다고 가정하지만 gcc에서도 마찬가지입니다. 맞습니까? 그러나 gcc는 위에서 언급 한 플래그를 통해 이에 대한 명시적인 제어를 제공합니다. Clang이 그걸 제공하지 않습니까, 아니면 제가 빠진 것이 있습니까?
(시스템이 OSX이다)
'-fdce'는 아마도 컴파일러에 의해 각 함수 내에서 수행되는 유사한 최적화를 가리킬 것입니다. 컴파일러가 개별 기본 블록이 작동하지 않는다는 것을 증명할 수있는 것은 매우 일반적인 일입니다. – zwol
예, 분명히 밝혀지지 않아서 죄송합니다. 필자의 "최적화 수준 인수"는 -fdce를 가리키며 링커가 아니라 컴파일러가 실행한다고 생각했습니다. 하지만 답장을 보내 주셔서 감사합니다. dead_strip은 링커에 전달하는 명령이며 실제로 바이너리의 크기를 줄였습니다 (gcc의 맨 페이지에 문서화되어 있지만 clang이 아니라고 생각합니다.) ld의 맨 페이지에서는 컴파일러 매뉴얼에 플래그를 보낼 수있는 것을 포함하기보다는 받아 들인 플래그를 얻을 수 있습니다 :)). – kamjagin