2010-07-15 4 views
0

크로스 컴파일러가 작동하는지 테스트하고 있습니다. hello world를 컴파일하면 잘 컴파일 된 것처럼 보이지만 hello.cpp를 1000 번 반복하는 동일한 프로그램으로 변경하면 생성되는 elf 파일의 크기가 정확히 동일합니다. 어떤 변화가 있어도 파일은 항상 같은 크기이고 내가 말할 수있는 한 동일한 내용을 가지고 있습니다. 이게 뭐야?내 크로스 컴파일러가 항상 동일한 파일 컴파일

+1

Ahm ... 올바른 파일을 전달하고 있습니까? – Bobby

+2

또는 편집기에서 "저장"을 클릭하는 것을 잊었습니까? (나도 그랬어) – Dan

+0

ELF 실행 파일의 최소 크기가 있습니까? (예 : Windows EXE)? "hello world"는 1000 회 반복하더라도 동적으로 링크되어 있으면 아주 작은 프로그램이 될 것입니다. 물론, 달리 실행하면 분명히 차이가납니다. – cHao

답변

2

자세한 내용이 없으면 많은 도움을받을 수 없습니다. 하지만 여기에 몇 가지 아이디어가 있습니다 :

  1. 바비 (Bobby)가 말한 것처럼 올바른 파일을 전달하고 있습니까?

  2. 실행중인 실행 파일이 생성되는 것이 확실합니까?

  3. 실제로 컴파일이 성공 했습니까? 실행중인 실행 파일은 현재 컴파일하려고 시도한 것이 아니라 마지막으로 성공적으로 실행 한 실행 파일 일 수 있습니다.

  4. viraptor가 제안 했으므로 은 (는) 파일들이 동일하다는 것을 절대적으로 확신합니까? diff는 그들이 동일하다고 말합니까? 변경 사항이 무엇이든간에 최적화 된 상태 일 가능성이 있습니다. 특히 호출되지 않은 코드에서 변경 작업을 수행하는 경우 특히 그렇습니다.

정말로, 당신이하는 일을 실제로 생각하고있는 것이 아닙니다.

  1. 당신의 컴파일 명령을 확인하십시오 - 그들은 명령 줄이나 메이크업 파일이든 될 - 정확합니다.

  2. 실행 파일을 삭제하여 새 파일이 실제로 생성되는지 확인해야합니다.

  3. 특히 정크를 컴파일하고 컴파일하는 경우 컴파일러가 수행하는 작업을 확인하십시오. 컴파일해서는 안됩니다. 그렇다면 컴파일하는 것이라고 생각하는 것을 컴파일하지 않습니다.

+0

나는 diff를 실행했고 "분명히 말할 수있는 한"분명히 충분하지 않습니다. 필자가 컴파일 한 각 프로그램의 실제 프로그램과 관련된 .text 섹션은 elf 파일의 다른 세그먼트와 비교할 때 무시할 만하다고 생각합니다. hello.cpp, nothello.cpp 및 junk.cpp를 컴파일했습니다. 안녕하세요와 nothello는 (다르지는 않았지만) 다르며, 쓰레기는 컴파일되지 않았습니다. –

6

"내가 말할 수있는 한"은 무엇을 의미합니까? diff 또는 다른 유틸리티를 사용하여 확인할 수 있습니다. 일부 소형 장치에 교차 컴파일러를 사용하는 경우 지정된 크기의 블록으로 출력을 할당하거나 대상 장치 크기를 미리 할당해야 할 수 있습니다. 일부 도구를 사용하여 실제로 정확히 동일한 파일을 얻을 수 있는지 확인할 수 있습니까?

+0

정확히 같은 파일을 얻지 못하는 것 같습니다.지금 당장 우려되는 점은 gcc에서 정적 라이브러리 플래그를 선언했기 때문에 동적 링크가 발생하지 않아야한다는 것입니다. 안녕 세상과 빈 메인을 컴파일 할 때 hello world를 표시 할 때 종종 많은 지시가 필요하지만 "거의"동일합니다. –

관련 문제