"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
'UFO ET IT' 카테고리의 다른 글
JSON 용 스트리밍 API가 있습니까? (0) | 2020.11.14 |
---|---|
이것이 SQL에서 부울 테스트를 수행하는 적절한 방법입니까? (0) | 2020.11.14 |
Laravel : Auth :: user ()-> id가 객체가 아닌 속성을 가져 오려고합니다. (0) | 2020.11.12 |
Android-뒤로 버튼 시뮬레이션 (0) | 2020.11.12 |
하다 (0) | 2020.11.12 |