UFO ET IT

"gcc -s"와 "strip"명령의 차이점은 무엇입니까?

ufoet 2020. 11. 14. 11:23
반응형

"gcc -s"와 "strip"명령의 차이점은 무엇입니까?


이 둘의 차이점이 무엇인지 궁금합니다.

  • gcc -s: 실행 파일에서 모든 기호 테이블 및 재배치 정보를 제거합니다.

  • strip: 개체 파일에서 기호를 버립니다.

그들은 같은 의미를 가지고 있습니까?

어느 것을 사용합니까?

  • 실행 파일의 크기를 줄이시겠습니까?
  • 실행 속도를 높이시겠습니까?

gcc컴파일러 / 링커되고, 그 -s옵션은 뭔가 이루어집니다 연결하면서 . 또한 구성 할 수 없습니다. 제거 할 정보 세트가 있습니다.

strip이미 컴파일 된 객체 파일에서 실행할 수있는 것입니다. 또한 제거 할 정보를 구성하는 데 사용할 수있는 다양한 명령 줄 옵션이 있습니다. 예를 들어, 추가 -g하는 디버그 정보 만 제거 gcc -g합니다.

strip당신이 bash 쉘에서 실행 될 수 있지만, bash는 명령이 아닙니다. GNU 바이너리 유틸리티 제품군의 일부인 bash와는 완전히 별 개인 명령입니다.


허용되는 답변은 매우 좋지만 추가 질문을 보완하기위한 것뿐입니다 (그리고 여기에있는 모든 사람에 대한 참고 자료로도 사용).

일부 옵션이있는 strip의 관점에서 gcc -s와 동등한 것은 무엇입니까?

둘 다 동일한 작업을 수행하여 기호 테이블을 완전히 제거합니다. 그러나 @JimLewis가 지적했듯이 스트립은 더 미세한 제어를 허용합니다. 예를 들어 재배치 가능한 개체에서 strip --strip-unneeded전역 심볼을 제거하지 않습니다. 그러나, strip또는 strip --strip-all전체 심볼 테이블을 제거한다.

실행 파일의 크기를 줄이고 실행 속도를 높이기 위해 어떤 것을 사용합니까?

기호 테이블은 바이너리의 할당 할 수없는 섹션입니다. 이는 RAM 메모리에로드되지 않음을 의미합니다. 예를 들어 충돌이 발생했을 때 스택 트레이스를 출력하기 위해 디버깅 목적에 유용한 정보를 저장합니다. 당신이 (그런 측면에서, 스토리지 용량의 심각한 제약이 시나리오가 될 것이다 기호 테이블을 제거하는 의미가 수 있던 경우 gcc -Os -s또는 make CXXFLAGS="-Os -s" ...그것은 또한 더 크기를 줄이기 위해 제거되는 작은 느린 바이너리가 발생합니다으로 유용합니다) . 나는 기호 표를 제거하면 언급 된 이유 때문에 속도가 향상 될 것이라고 생각하지 않습니다.

마지막으로 공유 객체 제거에 대한 다음 링크를 권장합니다. http://www.technovelty.org/linux/stripping-shared-libraries.html


"gcc -s"는 "strip"에 의해 수행되지 않는 기호 테이블과 함께 재배치 정보제거합니다 . 재배치 정보를 제거하면 주소 공간 레이아웃 무작위 화 에 약간의 영향을 미칩니다 . 링크를 참조하십시오 .


유사한 작업을 수행하지만 strip은 파일에서 제거되는 항목을보다 세밀하게 제어 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/1349166/what-is-the-difference-between-gcc-s-and-a-strip-command

반응형